资源描述:
《第3章 vc ++菜单和绘图ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章菜单和绘图3.1最基本的菜单:主菜单,消息之一——命令消息,最简单的输入3.2最简单的绘图:最基本的输出,也是验证对消息反应的主要方式之一3.3高级菜单:快捷菜单、菜单界面更新、工具栏3.1主菜单对于绝大多数应用程序,主菜单是每个应用程序的基本组成部分,因此主菜单一般是由应用程序向导在创建应用程序框架时自动为你创建的,后面的工作主要是以下三件事:增加新的菜单和菜单项进行菜单命令的消息映射编写菜单命令消息的处理函数代码(编写绘图代码,参见“绘图”一节)1.创建菜单/菜单项:打开主菜单,在菜单栏中选择新项方框,或在某一
2、菜单前按Ins键,按鼠标右键,选择Properties,出现属性对话框,在Caption后输入菜单名字,在ID后输入菜单项的ID值(创建菜单不需输入ID值)。2.设置菜单项的其他属性。可根据需要设置菜单项的其他属性。例如,要对菜单项“工具栏”添加Ctrl+T加速键,则Caption文本框的内容为:“工具栏(&T)tCtrl+T”。在加速键编辑器中建立相应的加速键表条目,并赋给与菜单选项相同的ID号。3.1.1使用菜单编辑器添加菜单3.1.2映射菜单命令消息启动ClassWizard,选择要把命令消息映射给该类的类名,然
3、后选择菜单命令的ID,选择消息类型(一般为COMMAND),点击AddFunction…按钮。这样一个菜单命令消息的映射就基本完成了。这里,重点要注意选择什么类,也就是前面讲的命令目标链的问题。一般而言,与输入输出操作有关的命令由视图类来管理,与文件保存有关的命令由文档类来处理,与主窗口布局有关的命令由主边框窗口来处理,与整个程序的运行状态有关的命令由应用程序类来处理。3.1.3菜单类菜单资源由菜单类CMenu管理。由于主菜单一般是由MFC应用程序向导在创建应用程序框架时自动为你创建的,是由CFrameWnd::Load
4、Frame加载显示的,所以在应用程序的源代码中没有看到菜单类CMenu的使用之处,但在其它地方可以看到CMenu类的代码。CMenu类封装了Windows应用程序菜单栏和弹出式菜单的HMENU句柄,它提供成员函数来创建、跟踪、更新和销毁一个菜单,通常用于在运行时动态操作菜单,如按鼠标右键而出现的弹出式上下文菜单。3.2绘图在VisualC++应用程序中,窗口的所有图形绘制都是通过设备场景和GDI绘图工具完成的。在进行绘图之前,首先必须获得设备场景,然后调用设备场景的绘图函数进行屏幕显示或打印。另外,绘图过程中还需要用到G
5、DI绘图工具,生成各种画笔、画刷、字体、调色板、位图和区域等,以便绘制出五颜六色、丰富多彩的各种图形。在MFC类库中,设备场景由CDC及其派生类定义,GDI绘图工具由CGdiObject的派生类定义。CDC类是定义设备场景对象的基类。通过CDC对象的成员函数可以完成所有的绘制工作。CDC类提供的成员函数可以用于对设备场景进行的操作、绘画工具的使用、画笔画刷的选择、颜色和调色板的操作、视区和窗口范围的操作、坐标的映射和转换。CDC的具体绘图函数包括:绘制文本、直线、椭圆、圆、弧、矩形和多边形、区域填充,以及调整字模、使用打
6、印机和操作元文件等。3.2.1设备场景为使用CDC对象,必须先构造它,然后调用它的成员函数。也可以在某个窗口对象中通过调用GetDC成员函数来获得设备场景的指针,然后应用该指针调用CDC的成员函数。但此时必须注意在绘图结束之后要通过调用ReleaseDC函数来释放设备场景。MFC类库还提供了数个专用的CDC派生类。CPaintDC专用于响应WM_PAINT消息的绘制,CClientDC用于窗口客户区(视图)的绘制,CWindowDC用于整个屏幕窗口(包括非客户区)的绘制;CMetalFileDC专用于MetalFile文
7、件的绘制。绘图函数都要求坐标按逻辑单位给出。缺省时,图形坐标系统的左上角位于坐标(0,0)处,逻辑单位为像素。1.设置像素(画点):SetPixel(intx,inty,COLORREFcrColor);SetPixel(POINTpoint,COLORREFcrColor);2.设置当前位置:MoveTo(intx,inty);MoveTo(POINTpoint);3.2.2绘图函数3.画直线:LineTo(intx,inty);LineTo(POINTpoint);Polyline(LPPOINTlpPoints,i
8、ntnCount);4.画弧:Arc(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4);ArcTo(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4);5.画矩形:Rectangle(intx1,inty1,intx2,in