收藏 分享(赏)

vc6s-chap05-程序界面设计1.ppt

上传人:dreamzhangning 文档编号:3315237 上传时间:2018-10-12 格式:PPT 页数:55 大小:528KB
下载 相关 举报
vc6s-chap05-程序界面设计1.ppt_第1页
第1页 / 共55页
vc6s-chap05-程序界面设计1.ppt_第2页
第2页 / 共55页
vc6s-chap05-程序界面设计1.ppt_第3页
第3页 / 共55页
vc6s-chap05-程序界面设计1.ppt_第4页
第4页 / 共55页
vc6s-chap05-程序界面设计1.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、1,第5章 程序界面设计,5.1 界面设计原则5.2 菜单5.3 工具栏5.4 状态栏,Ex05_1标准菜单 Ex05_2图像菜单 Ex05_3右键菜单 Ex05_4动态菜单 Ex05_5工具栏 Ex05_6下拉工具栏 Ex05_7ReBar Ex05_8状态栏,例题,5.1 界面设计原则,5.1.1 界面布局原则,1. 控件位置 2. 协调性 3. 一致性 4. 空间的使用 5. 简单性 6. 颜色 7. 图片和图标 8. 字体,5.1.2 用户帮助模型,5.2 菜单CMenu,5.2.1 菜单分类 5.2.2 相关的类与菜单资源 5.2.3 标准菜单 5.2.4 带有图标的菜单 5.2.5

2、 快捷菜单 5.2.6 动态菜单,CObject,CMenu,5.2.1 菜单种类,1. 标准菜单,3. 快捷菜单(右键菜单、上下文菜单),4. 动态菜单,5.2.2 相关类与菜单资源编辑器,表5- CMenu类的有关成员函数,表5-1 CMenu类的有关成员函数(续),表5-2 CCmdUI 类的常用成员函数,CCmdUI 类没有基类,在更新命令处理函数内调用CCmdUI类的相关函数更新菜单。,菜单项,下拉菜单各项,图 编辑菜单资源,菜单属性对话框,1. 创建菜单项 2 创建下拉菜单各项,表5-3 菜单属性对话框各项的含义,5.2.3 标准菜单,AppWizard自动生成的默认菜单 在默认菜

3、单上增添需要的菜单或删除无用的菜单。,ClassWizard增加消息处理(WM_COMMAND)函数。,ClassWizard增加更新命令UI消息的处理(UPDATE_COMMAND_UI),On+Update+菜单名,On+菜单名,例5-1: Ex05_1标准菜单的使用,程序菜单界面:,例5-1(图1) 程序菜单界面,(1)点击消息对话框1和消息对话框2分别弹出如下的消息对话框 。,程序功能:,(2)点击连接菜单出现右边的界面,连接菜单无效,且连接菜单前有打勾标记。点击断开菜单则出现断开菜单无效,且断开菜单前有打勾标记。,(1)打开IDR_MAINFRAME菜单(2) 增加菜单:菜单名:菜单

4、测试消息对话框1 ID_TEST_MESSAGE1DLG消息对话框2 ID_TEST_MESSAGE2DLG连接 ID_TEST_CONNECT断开 ID_TEST_BREAK,1. 新建一单文档应用程序Ex05_1,2 创建菜单,3 添加消息响应函数,ID_TEST_MESSAGE1DLG OnTestDlgMessage1dlg() ID_TEST_MESSAGE2DLG OnTestDlgMessage2dlg() ID_TEST_CONNECT OnTestConnect() ID_TEST_BREAK OnTestBreak(),4. 添加更新菜单消息响应函数,ID_TEST_CON

5、NECT OnUpdateTestConnect (CCmdUI* pCmdUI) ID_TEST_BREAK OnUpdateTestBreak (CCmdUI* pCmdUI),5. 定义成员变量,在Ex05_1View.cpp文件的构造函数中。,class CEx05_1View : public CView public:BOOL bCheck;BOOL bEnable; ,CEx05_1View: CEx05_1View()/构造函数 bCheck=1;bEnable=1; ,在Ex05_1View.h文件中定义两个BOOL变量。,6. 初始化成员变量,/菜单消息响应函数 /点击消息

6、对话1框菜单的消息函数 void CEx05_1View:OnTestMessagedlg1() AfxMessageBox(“这是消息对话框1!“); ,7 编写消息响应函数,/点击消息对话2框菜单的消息函数 void CEx05_1View:OnTestMessagedlg2() AfxMessageBox(“这是消息对话框2!“); ,/点击断开菜单的消息函数 void CEx05_1View:OnTestBreak( ) bCheck=1;bEnable=1; /点击连接菜单的消息函数 void CEx05_1View:OnTestConnect( ) bCheck=0;bEnable

7、=0; ,/菜单更新消息响应函数 /更新连接菜单 void CEx05_1View:OnUpdateTestConnect(CCmdUI* pCmdUI) pCmdUI-SetCheck(bCheck); /打勾或不打勾pCmdUI-Enable(!bEnable); /禁用或启用 /更新断开菜单 void CEx05_1View:OnUpdateTestBreak(CCmdUI* pCmdUI) pCmdUI-SetCheck(!bCheck);/打勾或不打勾pCmdUI-Enable(bEnable);/禁用或启用 ,8. 编译、运行和测试,5.3 工具栏,5.3.1 工具栏资源编辑器 5

8、.3.2 CToolBar类 5.3.3 常规工具栏 5.3.4 下拉式工具栏按钮,5.3.1 工具栏资源编辑器,1.创建工具栏,2.创建、移动和编辑工具栏按钮,(1) 创建一个新的工具栏按钮,(2) 移动一个工具栏按钮,(3) 删除一个工具栏按钮,(4) 在工具栏上的两个按钮中插入一个空白区,(5) 删除工具栏按钮的空白区,在Prompt框中输入提示字符串,程序运行时当鼠标移至该按钮时,提示字符串就会显示在状态栏上,其中在字符 n 后出现的字符串,会在出现在按钮下方的小标注栏内显示。,图 工具栏资源编辑器,5.3.2 CToolBar类,CToolBar是工具栏类,用于管理应用程序窗口中的工

9、具栏。,CObject,CCmdTarget,CWnd,CControlBar,CToolBar,表5-4 CToolBar类的主要成员函数,表5-4 CToolBar类的主要成员函数(续),5.3.3 常规工具栏,1.编辑工具栏资源 2.为每一个工具栏按钮添加消息处理函数 3.将工具栏载入应用程序中 m_wndToolBar.LoadToolBar(IDR_MAINFRAME) 4.给工具栏加上标题 m_wndToolBar.SetWindowText(“标准工具栏”) 5.使工具栏浮动(停靠),例5-5: Ex05_5工具栏的创建、载入、显示 与隐藏,程序界面:,程序启动时载入标准工具栏和

10、绘图工具栏,点击查看下面的绘图工具栏菜单可以使绘图工具栏显示或隐藏。,程序功能:,例5-5(图1) 程序界面,1.新建一单文档应用程序Ex05_5 2.利用工具栏资源编辑器创建绘图工具栏资源工具栏ID号:ID_DRAW_TOOLBAR直线:ID_DRAW_LINE矩形:ID_DRAW_RECTANGLE圆:ID_DRAW_CIRCLE文字:ID_DRAW_TEXT3.将工具栏载入应用程序中,在应用程序中一般通过重载CMainFrame类中的OnCreate函数载入工具栏。,4.给工具栏加上标题,(1)在MainFrm.h头文件中定义Public:CToolBar m_DrawToolBar;(

11、2)在MainFrm.cpp实现文件中 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) /载入绘图工具栏 if (!m_DrawToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_DrawToolBar.LoadToolBar(IDR_DRAW_TOOLBAR) TRACE0(“绘图工具栏创建失败!n“);ret

12、urn -1; / fail to create,m_DrawToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) 各项的含义:,TBSTYLE_FLAT:工具栏风格,平 WS_CHILD:子窗口 WS_VISIBLE:可见,CBRS_TOP:工具栏停靠位置,TOP-顶部,BOTTOM-底部 CBRS_GRIPPER:工具栏获得把手 CBRS_TOOLTIPS:工具条将显示工具提示

13、CBRS_FLYBY:在对应的状态栏中显示提示信息 CBRS_SIZE_DYNAMIC:工具栏尺寸可动态调整,/浮动(停靠) /允许工具栏停靠于客户区的任意位置 m_DrawToolBar.EnableDocking(CBRS_ALIGN_ANY);/框架允许工具栏停靠在任何位置 EnableDocking(CBRS_ALIGN_ANY); DockControlBar( ,/给标准工具栏加上标题m_DrawToolBar.SetWindowText(“绘图工具栏“);,5. 工具栏的显示与隐藏,(1)编辑查看菜单下的绘图工具栏菜单绘图工具栏: ID_VIEW_DRAWTOOLBAR(2)添加

14、和编写菜单消息响应函数与菜单更新消息响应函数,/菜单消息响应函数void CMainFrame:OnViewDrawbar() BOOL bVisible = (m_DrawToolBar.GetStyle( ) ,RecalcLayout来重新放置它的控制条和客户窗口。,/菜单更新消息响应函数 void CMainFrame:OnUpdateViewDrawbar(CCmdUI* pCmdUI) BOOL bVisible = (m_DrawToolBar.GetStyle( ) ,6. 编译、调试和运行,5.5 状态栏,CStatusBar是状态栏类,用于管理应用程序窗口中的状态栏。,CO

15、bject,CCmdTarget,CWnd,CControlBar,CStatusBar,5.5.1 CStatusBar类,表5-6 CStatusBar类的主要成员函数,1.定义状态栏各窗格字符串ID数组 2.声明状态栏对象 3.创建状态栏,把一个窗格添加到状态栏中的步骤:,1.为窗格创建一个ID命令 2.创建窗格的缺省字符串 3.添加窗格的命令ID到状态栏的描述数组 4.为窗格创建一个处理程序,5.5.2 状态栏的创建,创建一个状态栏的步骤:,例5-8:Ex05_8在状态栏显示鼠标的位置和时间,时间,鼠标位置,新建一单文档应用程序Ex05_8,1.创建新的命令ID和缺省字符串 新的命令I

16、D为:ID_INDICATOR_MOUSE, 缺省字符串为:鼠标位置。,创建和设置方法:一种是View-Resource Symbol,添加ID ;然后到String table中添加字符串。另一种是ID号和字符串都在String Table中添加。当用后一种方式操作时,若完成后,时钟栏并不显示时间,则需要将此New String在String Table中对应的Value值加1(可在Resource.h中修改)。,在状态栏中显示鼠标位置,2. 添加ID到指示器数组在MainFrm.cpp中的indicators声明处添加)ID_INDICATOR_MOUSE,代码如下:static UINT

17、 indicators = ID_SEPARATOR, ID_INDICATOR_MOUSE, /鼠标位置状态栏ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;这一步中ID_INDICATOR_MOUSE的插入位置将影响鼠标位置窗格在状态栏中的显示位置。,3. 设置状态栏的外观(在MainFrm.cpp的OnCreate()函数中实现),int index=m_wndStatusBar.CommandToIndex (ID_INDICATOR_MOUSE); m_wndStatusBar.SetPaneInfo(index,ID_IN

18、DICATOR_MOUSE,SBPS_POPOUT,80);,SBPS_POPOUT:凸,SBPS_STRETCH:凹,4. 创建状态栏窗格的更新处理程序,void CEx5_8View:OnMouseMove(UINT nFlags, CPoint point) /设置状态栏输出CStatusBar* pStatus=(CStatusBar*) AfxGetApp()-m_pMainWnd- GetDescendantWindow(ID_VIEW_STATUS_BAR);if(pStatus)char mouseposition40;sprintf(mouseposition ,“(%d,%

19、d)“,point.x,point.y);/在状态条的第二个窗格中输出当前鼠标的位置pStatus-SetPaneText(1, mouseposition,TRUE);pStatus-SetPaneInfo( 1, ID_INDICATOR_MOUSE, SBPS_POPOUT, 80); CView:OnMouseMove(nFlags, point); ,在状态栏中显示时间,(由于状态栏根据Caption确定时间窗格的缺省宽度,使用此值将为时间的显示预留空间)。,1.创建新的命令ID和缺省字符串 新的命令ID为:ID_INDICATOR_CLOCK 缺省字符串为:00:00:00。,2.

20、 添加ID到指示器数组在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代码如下:static UINT indicators = ID_SEPARATOR, ID_INDICATOR_MOUSE, /鼠标位置状态栏ID_INDICATOR_CLOCK, /时钟状态栏ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;这一步中ID_INDICATOR_CLOCK的插入位置将影响时间窗格在状态栏中的显示位置。,3. 设置状态栏的外观(在MainFrm.cpp的OnCreate()函数中实现),in

21、t index=m_wndStatusBar.CommandToIndex (ID_INDICATOR_ CLOCK); m_wndStatusBar.SetPaneInfo(index,ID_INDICATOR_CLOCK,SBPS_POPOUT,80);,SBPS_POPOUT:凸,SBPS_STRETCH:凹,4. 安装定时器(在MainFrm.cpp中OnCreate函数处添加代码):,m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY); DockControlBar(,void CMainF

22、rame:OnTimer(UINT nIDEvent) CTime time;time=CTime:GetCurrentTime();/得到当前时间,此成员函数/返回一个代表当前时间的CTime对象 CString s=time.Format(“%H:%M:%S“);/转换时间格式int index=m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK) ;m_wndStatusBar.SetPaneText( index,s);CFrameWnd:OnTimer(nIDEvent); ,5. 编写时间处理函数利用ClassWizard为CMainF

23、rame类加入WM_TIMER的 消息处理函数OnTimer,并添加代码如下:,6. 销毁定时器利用ClassWizard为CMainFrame类加入WM_CLOSE的消息处理函数OnClose,并添加代码如下:,void CMainFrame:OnClose() KillTimer(1);CFrameWnd:OnClose(); ,表 资源类型及其标示,void CTestDlg:OnTimer(UINT nIDEvent) switch(nIDEvent)case 1: CTime Time=CTime:GetCurrentTime(); int Hour=Time.GetHour();

24、int Min=Time.GetMinute(); if (Hour=18),OnTimer(UINT nIDEvent) 函数,case 2: . break; ,SetTimer函数的原型变为: UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD) 当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函

25、数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。,SetTimer()函数,例: SetTimer(1,1000,NULL); 1:计时器的名称; 1000:时间间隔,单位是毫秒; NULL:使用onTime函数。 当不需要计时器的时候调用KillTimer(nIDEvent);,KillTimer()函数,KillTimer(int nIDEvent)来取消定时器。,(1) 在View中获得Doc指针 CYouSDIDoc *pDoc = GetDocument();一个视只能有一个文档。 (2) 在App中获得Main

26、Frame指针 CWinApp 中的 m_pMainWnd变量就是MainFrame的指针 也可以: CMainFrame *pMain = (CMainFrame*)AfxGetMainWnd(); (3) 在View中获得MainFrame指针 CMainFrame *pMain =(CMaimFrame *)AfxGetApp()-m_pMainWnd; (4) 获得View(已建立)指针 CMainFrame *pMain =(CMaimFrame *)AfxGetApp()-m_pMainWnd; CYouView *pView =(CYouView *)pMain-GetActiv

27、eView(); ( 5) 获得当前文档指针 CDocument * pCurrentDoc = (CFrameWnd *)m_pMainWnd-GetActiveDocument();,(6) 获得状态栏与工具栏指针 CStatusBar * pStatusBar (CStatusBar *) AfxGetMainWnd()-GetDescendantWindow(AFX_IDW_STATUS_BAR); CToolBar * pToolBar = (CtoolBar *) AfxGetMainWnd()-GetDescendantWindow(AFX_IDW_TOOLBAR); (7) 如果框架中加入工具栏和状态栏变量还可以这样 (CMainFrame *)GetParent()-m_wndToolBar; (CMainFrame *)GetParent()-m_wndStatusBar; (8) 在MainFrame获得菜单指针 CMenu *pMenu = m_pMainWnd-GetMenu(); (9) 在任何类中获得应用程序类 用MFC全局函数AfxGetApp()获得。,第五章 结 束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报