高手莫笑,初学者,学生!
基于VS2010MFC的单文档项目。包括菜单的创建,工具栏的函数实现,及绘图函数简单介绍。如果是新建立的菜单,除了要选择一个类来作为代码实现文件外。
所创建的项目名称为13Jan21Pro。
创建一个新菜单的前提是要基于单文档的工程项目。包括用菜单编辑器添加菜单栏及菜单项,利用向导生成菜单消息响应函数。按照步骤创建基于单文档工程项目13Jan21Pro。
资源文件-->13JanPro.rc-->选中Menu右键-->插入Menu-->弹出13Jan21Pro-IDR_MENU1-Menu框,设置两个菜单如图1.,并右键设置其下的ID如表1。
图1
表格 1: 菜单名称及ID
名字 |
ID |
直线 |
ID_LINE |
圆 |
ID_CIRCLE |
惊喜 |
ID_SURPRISE |
第一层菜单没有ID号设置,只有子菜单才有ID设置。所以“输出”和“帮助”没有ID设置选项。
void CMy13Jan21ProView::OnLine() { //获取环境设备 CClientDC dc(this); OnPain_flag = 0; //直线起点 dc.MoveTo(50, 100); //直线终点 dc.LineTo(50, 200); }ID_CIRCLE菜单对应的消息处理函数代码
void CMy13Jan21ProView::OnCircle() { CClientDC dc(this); OnPain_flag = 0; dc.Ellipse(100, 100, 200, 300); dc.Rectangle(300, 100, 500, 200); }
//开a启OnPaint函数 void CMy13Jan21ProView::OnSurprise() { OnPain_flag = 1; InvalidateRect(FALSE); }OnPaint函数代码,由ID_SURPRISE对应函数激发
<span style="color:#330000;">void CMy13Jan21ProView::OnPaint() { CPaintDC dc(this); if(OnPain_flag){ LOGFONT font; font.lfHeight = 50; font.lfItalic = 0; font.lfEscapement = 0; font.lfCharSet = GB2312_CHARSET; font.lfUnderline = 1; font.lfStrikeOut = 0; CFont nFont, *oFont; nFont.CreateFontIndirect(&font); oFont = dc.SelectObject(&nFont); CString Str; Str = "天涯若比零,26教打开水!"; dc.TextOut(0, 0, Str); dc.SelectObject(&font); } } </span>
CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MENU1, RUNTIME_CLASS(CMy13Jan21ProDoc), RUNTIME_CLASS(CMainFrame), // 主¡Â SDI 框¨°架¨¹窗ä¡ã口¨² RUNTIME_CLASS(CMy13Jan21ProView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate);
a. 用与新建菜单相同的方法插入一个工具栏Toobar,默认其标识为IDR_TOOLBAR1。
b. 在IDR_TOOLBAR1中添加图形(画笔等绘制图形的工具在工具栏中),修改每一个图形的ID号(选中图标,右键属性),如直线按钮为ID_TLINE,圆的ID为ID_TCIRCLE,惊喜ID为ID_TSURPRISE。
c. 通过类向导指定IDR_TOOLBAR1所属类为CMyView。
d. 通过类向导建立各命令在CMyView中断额消息响应函数,方法与菜单消息响应函数的建立过程相同。然后在各消息响应函数内添加程序代码(即调用相应的菜单响应函数)。