1 / 55

菜单、工具栏和状态栏是 Windows 不可或缺的界面元素。其中,菜单和工具栏提供了用户传递命令的界面,状态栏提供了一个输出区域。 本章主要介绍以下内容: ( 1 )菜单。 ( 2 )工具栏。

菜单、工具栏和状态栏是 Windows 不可或缺的界面元素。其中,菜单和工具栏提供了用户传递命令的界面,状态栏提供了一个输出区域。 本章主要介绍以下内容: ( 1 )菜单。 ( 2 )工具栏。 ( 3 )状态栏。. 3.1 菜单. 重点介绍: 菜单类型 创建菜单 菜单设计 菜单程序 键盘快捷键. 3.1.1 菜单类型. 菜单是用户与程序交互的一个非常重要的元素,使用菜单方便了用户的操作。 Windows 的菜单分为两种类型: 固定菜单:是固定在菜单栏上的菜单。 快捷菜单:叫上下文菜单,或者叫弹出式菜单、快捷菜单。. 3.1.2 创建菜单.

Download Presentation

菜单、工具栏和状态栏是 Windows 不可或缺的界面元素。其中,菜单和工具栏提供了用户传递命令的界面,状态栏提供了一个输出区域。 本章主要介绍以下内容: ( 1 )菜单。 ( 2 )工具栏。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 菜单、工具栏和状态栏是Windows不可或缺的界面元素。其中,菜单和工具栏提供了用户传递命令的界面,状态栏提供了一个输出区域。菜单、工具栏和状态栏是Windows不可或缺的界面元素。其中,菜单和工具栏提供了用户传递命令的界面,状态栏提供了一个输出区域。 • 本章主要介绍以下内容: • (1)菜单。 • (2)工具栏。 • (3)状态栏。 民政学院软件学院 蒋国清

  2. 3.1 菜单 • 重点介绍: • 菜单类型 • 创建菜单 • 菜单设计 • 菜单程序 • 键盘快捷键 民政学院软件学院 蒋国清

  3. 3.1.1 菜单类型 • 菜单是用户与程序交互的一个非常重要的元素,使用菜单方便了用户的操作。 • Windows的菜单分为两种类型: • 固定菜单:是固定在菜单栏上的菜单。 • 快捷菜单:叫上下文菜单,或者叫弹出式菜单、快捷菜单。 民政学院软件学院 蒋国清

  4. 3.1.2 创建菜单 • 1. 创建菜单资源 • 菜单资源既可以在菜单编辑器中创建,也可以通过代码在程序中创建。这里介绍3种创建菜单的方法。 • (1)从菜单栏的菜单命令创建菜单资源。 • (2)通过资源面板的快捷菜单选项创建菜单。 • (3)在程序中通过代码创建菜单资源。 • 通过如下代码,即可创建一个空的菜单资源。 • CMenu popup; • popup.CreatePopupMenu(); 民政学院软件学院 蒋国清

  5. 3.1.2 创建菜单 • 3.1.2 创建菜单 方法是: • (1)双击菜单编辑器中新增菜单的方框,弹出Menu Item Properties对话框(图4-4)。 • (2)输入菜单的标题。在相应的标题字母前加“&”,则该字母为菜单的助记符。 民政学院软件学院 蒋国清

  6. 图4-4 创建菜单 民政学院软件学院 蒋国清

  7. 3. 创建菜单项方法是: • (1)在菜单编辑器中单击打开要添加菜单项的菜单,或者选中某个已有菜单后按Insert键,双击新增菜单项的方框,弹出Menu Item Properties对话框(图4-5)。 • (2)选择或输入菜单项的ID,输入菜单项的标题。在相应的标题字母前加“&”,则该字母为菜单项的助记符。 • (3)根据需要选择对话框中的复选框,以便决定菜单项的各个属性。 民政学院软件学院 蒋国清

  8. 图4-5 Menu Item Properties对话框 民政学院软件学院 蒋国清

  9. 3. 创建快捷菜方法如下: (1)新建一个菜单资源。 (2)在该菜单资源创建一个菜单。 (3)为菜单创建菜单项。 (4)保存菜单资源。 (5)在源代码文件添加如下代码: Menu myMenu; VERIFY(myMenu.loadMenu(IDR_MENU1)); (Menu* pPopup=myMenu.GetSubMenu(0)); ASSERT(pPopup!=NULL); pPopup->TrackPopupMenu(TPM_LEFTALIGN||TPM_RIGHTBUTTON, x, y, AfxGetMainWnd()); 民政学院软件学院 蒋国清

  10. 3.1.3 菜单设计 1.往菜单系统菜单添加菜单项 2. 创建相应的快捷菜单: 首先创建一个新的菜单资源,然后在该菜 单资源中添加菜单项。 民政学院软件学院 蒋国清

  11. 3.1.4 菜单程序 • 1. 菜单的消息映射 • 定义好菜单资源后,就可以对每一个菜单项进行消息映射。 • 在MFC应用程序中使用起来却是很简单。所有的消息都通过消息响应表映射到响应函数,编程人员所要做的主要工作是在添加映射项后,完成消息的处理函数。 民政学院软件学院 蒋国清

  12. 2. 菜单的相关操作包括: • (1)创建菜单 • (2)装入菜单。 • (3)菜单的初始化。 • (4)添加菜单项。 • (5)修改菜单项。 • (6)删除菜单项。 • (7)获取菜单项。 民政学院软件学院 蒋国清

  13. 3. 添加单击菜单项的处理函数利用3.1.3小节建立好的菜单项,映射它们的单击处理函数。 • (1)打开“menu”工程。 • (2)点击“查看”->“建立类向导”,弹出如图4-9所示的对话框,在CMenuView类映射“新菜单”下三个子菜单的COMMAND消息 • (3)修改上一步骤映射的消息处理函数,如书本程序代码3.1所示。 • (4)编译运行应用程序。点击“新菜单”->“新菜单2”->“新菜单2-2”,会弹出消息对话框提示选择了该菜单项,如图4-10所示。 民政学院软件学院 蒋国清

  14. 图4-9 映射COMMAND消息 图4-10 程序运行效果 民政学院软件学院 蒋国清

  15. 3. 快捷菜单的编程 • 快捷菜单是一种浮动的弹出式菜单,它是一种新的用户界面设计风格。当用户按下鼠标右键时,就会相应地弹出一个快捷菜单,其中提供了几个与当前选择内容相关的选项。 • 创建快捷菜单需要用到CMenu类的TrackPopupMenu()函数来设置和显示快捷菜单,其原型如下: • BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL ); • 其中,nFlags为快捷菜单坐标设定方式和鼠标操作方式。 民政学院软件学院 蒋国清

  16. 快捷菜单的制作方式有两种: • (1)用CreatePopupMenu()建立一个空快捷菜单,再使用AppendMenu()或InsertMenu()函数增加所需的菜单项。 • (2)从菜单资源中获得一子菜单作为快捷菜单。 民政学院软件学院 蒋国清

  17. 3.1.5 键盘快捷键 • 1. 键盘快捷键编辑器 • 2. 为“Menu”工程的新菜单项添加键盘快捷键 民政学院软件学院 蒋国清

  18. 1. 键盘快捷键编辑器 • 打开键盘快捷键编辑器(图4-13)后,可以通过选中一项键盘快捷键后按Insert键添加一个键盘快捷键新项。 • 接着,双击键盘快捷键新项,会弹出Accel Properties对话框(图4-14)。在该对话框中,可以设置具体的键盘快捷键ID与具体的键盘快捷键。 民政学院软件学院 蒋国清

  19. 图4-13 键盘快捷键编辑器 民政学院软件学院 蒋国清

  20. 2. 为“Menu”工程的新菜单项添加键盘快捷键步骤如下: • (1)打开“Menu”工程。 • (2)选择要定义键盘快捷键的新菜单项,按Alt+Enter组合键。系统弹出Menu Item Properties对话框。 • (3)在标题文本框中将键盘快捷键添加到菜单项标题的后面。其中,菜单项ID_NEW1的键盘快捷键是Ctrl+A,菜单项ID_NEW2-1的键盘快捷键是Ctrl+B,ID_NEW2-2的键盘快捷键是Ctrl+C。在菜单标题后输入转移符“\t”,可以让所有键盘快捷键都按左对齐的方式显示,如图4-15所示。 民政学院软件学院 蒋国清

  21. 图4-16 建立键盘快捷键 民政学院软件学院 蒋国清

  22. (4)在键盘快捷键编辑器中建立相应的快捷键表条目。双击键盘快捷键编辑器的空白行,在弹出的“Accel Properties”对话框中的ID选择新菜单项的ID,在快捷键中则设置与该菜单项相应的键盘快捷键。 • (5)编译运行应用程序,按快捷键就可执行相应的菜单操作。 民政学院软件学院 蒋国清

  23. 3.2 工具栏 • 3.2.1 工具栏编辑器 • 3.2.2 工具栏操作的相关函数 • 3.2.3 工具栏程序 民政学院软件学院 蒋国清

  24. 3.2.1 工具栏编辑器 • 1. 创建一个新的工具栏资源 • 2. 创建一个新的工具栏按钮 • 3. 移动一个按钮 • 3. 删除一个按钮 • 5. 在工具栏中插入间隔 • 6. 工具栏按钮属性的设置 民政学院软件学院 蒋国清

  25. 3.2.2 工具栏操作的相关函数 • 介绍与工具栏操作相关的函数: • 1. Create() • 2. LoadToolBar() • 3. LoadBitmap() • 3. SetBitmap() • 5. GetItemID() • 6. EnableDocking() 民政学院软件学院 蒋国清

  26. 1. Create() • Create()函数用于建立Windows工具栏,并且把它连接到工具栏对象上。Create()函数的原型为: • BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR ); • 函数创建成功则返回1,否则返回0。 民政学院软件学院 蒋国清

  27. 2. LoadToolBar() • 函数LoadToolBar()用于加载已有的工具栏资源,其函数原型如下: • BOOL LoadToolBar( LPCTSTR lpszResourceName ); • BOOL LoadToolBar( UINT nIDResource ); 民政学院软件学院 蒋国清

  28. 3. LoadBitmap() • LoadBitmap()函数用于装入工具栏按钮的位图资源,该位图做为显示在按钮上方的图形,其函数原型如下: • BOOL LoadBitmap( LPCTSTR lpszResourceName ); • BOOL LoadBitmap( UINT nIDResource ); 民政学院软件学院 蒋国清

  29. 3. SetBitmap() • SetBitmap()函数用于指定工具栏按钮的位图资源,其函数原型如下: • BOOL SetBitmap( HBITMAP hbmImageWell ); • 其中,参数hbmImageWell是位图资源句柄。 民政学院软件学院 蒋国清

  30. 5. GetItemID() • 函数GetItemID()用于以按钮的索引编号来查找其命令ID值,其函数原型如下: • UINT GetItemID( int nIndex ) const; • 其中,参数nIndex工具栏按钮的索引编号。 民政学院软件学院 蒋国清

  31. 6. EnableDocking() • 函数EnableDocking()是CControlBar类的成员函数,用于设置工具栏的浮动性,其函数原型为: • void EnableDocking( DWORD dwStyle ); • 其中,参数dwStyle是工具栏浮动的位置 民政学院软件学院 蒋国清

  32. 3.2.3 工具栏程序 • 本小节创建一个简单的能够画直线、圆和矩形的程序,通过切换工具栏按钮能够改变要画的图形。 • 程序的创建步骤如下: 民政学院软件学院 蒋国清

  33. (1)点击“文件”->“新建”,弹出新建对话框。切换到工程标签页,在对话框左侧选择“MFC AppWizard(exe)”工程,在对话框右侧输入工程的名字,如toolbar。输入或者选择工程保存的位置。单击“确定”按钮新建一个应用程序工程,如图4-22所示。 • (2)在弹出的“MFC AppWizard-Step 1”对话框中,为简单起见,选择单文档的应用程序类型,如图4-23所示。 民政学院软件学院 蒋国清

  34. 图4-22 新建应用程序工程 图4-23 选择单文档应用程序类型 民政学院软件学院 蒋国清

  35. (3)创建工具栏资源。打开资源面板,右键单击“Toolbar”文件夹,在快捷菜单中选择“Insert Toolbar”菜单项,创建一个新的工具栏资源,ID为IDR_TOOLBAR1。在工具栏编辑器中添加3个工具栏按钮,按钮的ID号分别为ID_LINE、ID_RECTANGEL与ID_ELLIPSE,添加后工具栏资源如图4-24所示。 民政学院软件学院 蒋国清

  36. 图4-24 工具栏资源 民政学院软件学院 蒋国清

  37. (4)在应用程序中加载工具栏资源。在CMainFrame类中添加一个管理工具栏的对象m_wndDrawToolBar,也就是在CMainFrame类的定义代码中添加如下代码:(4)在应用程序中加载工具栏资源。在CMainFrame类中添加一个管理工具栏的对象m_wndDrawToolBar,也就是在CMainFrame类的定义代码中添加如下代码: • protected: // control bar embedded members • CToolBar m_wndDrawToolBar; • 接着,在CMainFrame 类的OnCreate()函数中添加装载工具栏的代码.如课本程序代码3.4 民政学院软件学院 蒋国清

  38. (5)在CToolbarView类中手动添加变量,代码如下:(5)在CToolbarView类中手动添加变量,代码如下: • public: • CPoint m_point1, m_point2;//记录鼠标按下和松开的点 • bool m_bLButtonDown;//标识鼠标是否被按下 • enum {DRAW_LINE, DRAW_RECTANGEL, DRAW_ELLIPSE} m_flag;//标识画的图形类型 • 接着,在CToolbarView类的构造函数中初始化这些变量,如课本程序代码3.5所示。 民政学院软件学院 蒋国清

  39. (6)点击“查看”->“建立类向导”,在“MFC ClassWizard”对话框中在CToolBarView类映射新创建的3个工具栏按钮的命令处理消息和界面更新处理消息。图4-25为映射ID_LINE工具栏按钮的命令处理消息。 • 修改消息的处理函数,如课本程序代码3.6所示。 民政学院软件学院 蒋国清

  40. 图4-25 映射工具栏按钮的消息 民政学院软件学院 蒋国清

  41. (7)点击“查看”->“建立类向导”,在“MFC ClassWizard”对话框中在CToolBarView映射鼠标按下、鼠标松开和鼠标移动消息的处理。如图4-26为映射WM_LBUTTONDOWN消息。 • 修改鼠标消息的处理函数,如课本程序代码3.7所示。 民政学院软件学院 蒋国清

  42. 图4-26 映射鼠标消息 民政学院软件学院 蒋国清

  43. (8)修改CToolbarView类的OnDraw()函数, • (9)编译运行应用程序,在程序中画一个椭圆的效果如图4-27所示。 民政学院软件学院 蒋国清

  44. 图4-27 程序的运行效果 民政学院软件学院 蒋国清

  45. 3.3 状态栏 • 3.3.1 创建状态栏 • 3.3.2 状态栏操作的相关函数 • 3.3.3 状态栏程序 民政学院软件学院 蒋国清

  46. 本程序在状态栏中显示系统的时间,程序实现的步骤如下:本程序在状态栏中显示系统的时间,程序实现的步骤如下: • (1)点击“文件”->“新建”,弹出新建对话框。切换到工程标签页,在对话框左侧选择“MFC AppWizard(exe)”工程,在对话框右侧输入工程的名字,如status。输入或者选择工程保存的位置。单击“确定”按钮新建一个应用程序工程,如图4-28所示。 • (2)在弹出的“MFC AppWizard-Step 1”对话框中,为简单起见,选择单文档的应用程序类型,如图4-29所示。 民政学院软件学院 蒋国清

  47. 图4-28 新建应用程序工程 民政学院软件学院 蒋国清

  48. (3)在文件“MainFrm.cpp”中往indicators数组添加一个用于显示系统时间的显示面板,如程序代码3.9所示。(3)在文件“MainFrm.cpp”中往indicators数组添加一个用于显示系统时间的显示面板,如程序代码3.9所示。 • 图4-29 选择单文档应用程序类型 民政学院软件学院 蒋国清

  49. (4)在CMainFrame类中添加一个用于记录时钟事件ID号的变量,代码如下:(4)在CMainFrame类中添加一个用于记录时钟事件ID号的变量,代码如下: • protected: // control bar embedded members • UINT m_timer; • 接着,在CMainFrame类的OnCreate()函数中创建状态栏,设置时钟面板信息,设置时钟, 民政学院软件学院 蒋国清

  50. (5)点击“查看”->“建立类向导”,在“MFC ClassWizard”对话框中,在CMainFrame类映射时钟消息,如图4-30所示。 • 图4-30 映射时钟消息 民政学院软件学院 蒋国清

More Related