第11讲MFC中资源的应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第11讲在MFC中创建应用程序的资源要点:1、创建菜单、工具栏2、创建对话框在Windows的可执行文件中,资源是独立于代码的,使用单独的ResourceCompiler进行编译,并嵌入到可执行文件中。在编程过程中,代码是可复用的,资源也是可复用的,通过资源的“导入”和“导出”功能来实现资源的可复用。资源是Windows应用程序用户界面的重要组成部分。资源包括:菜单、工具条、对话框、位图等。通过MFC编程了解资源文件的创建与应用。VC++项目工作区的资源视图资源:Bitmap,Dialog,Icon,Menu,Toolbar….视图|资源视图一、菜单资源的应用VC++主菜单框架创建一个单文档程序增加菜单项【例10-1】创建一个基于单文档结构的应用程序,在视图中显示一行字符串“HelloWorld!”,通过建立包含“显示”和“颜色选择”两个菜单项的“操作”菜单来控制字符串,菜单项“显示”用以控制字符串的显示与否,菜单项“颜色选择”中包含一个级连菜单,内容为“红”、“绿”和“蓝”三个菜单项。ID_OPER_SHOWID_OPER_REDID_OPER_GREENID_OPER_BLUE(1)创建项目并生成单文档应用程序项目名:T10-Menu,类型:MFC,向导:MFC应用程序,应用程序类型:单文档生成类:CMainFrame,CT10MenuApp,CT10MenuDoc,CT10MenuView(2)编辑菜单项双击“资源视图|Menu|IDR_MAINFRAME”,进入菜单编辑器,选择菜单项的“属性”编辑菜单项(ID,Caption,Separator,Pop-up)。(3)设置属性IDCaptionSeparatorPop-up操作√ID_OPER_SHOW显示\tCtrl+W分隔线√颜色√ID_OPER_RED红色[&R]ID_OPER_GREEN绿色[&G]ID_OPER_BLUE蓝色[&B]使用快捷菜单和属性对话框设置属性在T10-MenuView.h的CT10MenuView:publicCView中声明(公有变量):classCT10MenuView:publicCView{…..public://单文档Menu中使用COLORREFm_nColors[3];//用户可选颜色数组DWORDm_nColorIndex;//当前所选颜色索引CStringm_strShow;//显示的内容BOOLm_bShow;//是否显示……}(4)声明全局变量(5)初始化公有变量CT10MenuView::CT10MenuView(){m_nColors[0]=RGB(255,0,0);m_nColors[1]=RGB(0,255,0);m_nColors[2]=RGB(0,0,255);m_nColorIndex=0;m_strShow=LHelloWorld!;m_bShow=TRUE;}(6)输出字符串voidCT10MenuView::OnDraw(CDC*pDC){……if(m_bShow){pDC-SetTextColor(m_nColors[m_nColorIndex]);//设置输出字符串颜色pDC-TextOut(100,100,m_strShow);//输出字符串}……}执行结果:窗口输出红色“HelloWorld!”字符。下面将介绍如何通过菜单项来控制程序,在介绍菜单项的响应时,必须先了解几个消息响应机制COMMAND消息:单击菜单项时产生,映射菜单项的处理函数UPDATE_COMMAND_UI消息:绘制菜单项时产生,决定菜单项的状态消息响应机制:1、在…View.h中声明菜单项的处理函数2、在…view.cpp中完成COMMAND与菜单项处理函数的绑定3、在…view.cpp中编写菜单项处理函数ON_COMMAND_RANGE:响应连续对象ID的若干个COMMAND消息而提供ON_UPDATE_COMMAND_UI_RANGE:实现若干个菜单项状态更新对“颜色(red、green、blue)”菜单项的处理方法1、确定R\G\B的ID号连续2、手动添加ON_COMMAND_RANGE消息映射a声明OnColorChange函数b完成ON_COMMAND_RANGE消息与OnColorChange函数的绑定c编写OnColorChange函数(7)显示菜单项(COMMAND)COMMAND消息在用户单击菜单项时产生,用来控制菜单项。操作:选择“显示”菜单项,快捷菜单:添加事务处理程序。(选COMMAND消息,CT10MenuView类,在对应函数OnOperShow()中添加代码)在T10-MenuView.cpp中增添OnOperShow()函数voidCT10MenuView::OnOperShow(){m_bShow=!m_bShow;//强制程序刷新窗口Invalidate();}执行结果:可看到“显示”菜单项工作正常(8)显示菜单项标记(UPDATE_COMMAND_UI)UPDATE_COMMAND_UI消息是在窗口将要绘制菜单项的时候产生,上例中,仅仅只是使用“显示”菜单项来控制是否显示似乎还不够,如果“显示”菜单项能够配合主程序体现出当前是否显示的状态可能会更好一些。为ID_OPER_SHOW添加UPDATE_COMMAND_UI消息。在OnUpdateOperShow函数中加入如下代码:voidCT10MenuView::OnUpdateOperShow(CCmdUI*pCmdUI){pCmdUI-SetCheck(m_bShow);//设置菜单项标志}执行结果:显示菜单项的状态与实际是否显示字符串的状态一致,通过菜单项前面的“√”标记来体现。voidEnable(BOOLbOn=TRUE)禁止或者允许该菜单项voidSetCheck(intnCheck=1)设置菜单项/工具条按钮的check状态,显示标志为“√”voidSetRadio(BOOLbOn=TRUE)与SetCheck功能类似,显示标志为“·”voidSetText(LPCTSTRlpszText)设置菜单项的Caption属性CCmdUI类常用的方法(8)处理显示多个菜单项(ON_COMMAND)方法1选择菜单项ID:ID_OPEN_RED,其COMMAND消息voidCT10MenuView::OnOperRed(){m_nColorIndex=0;//改变字体颜色Invalidate();}选择菜单项ID:ID_OPEN_GREEN,其COMMAND消息voidCT10MenuView::OnOperGreen(){m_nColorIndex=1;//改变字体颜色Invalidate();}选择菜单项ID:ID_OPEN_BLUE,其COMMAND消息voidCT10MenuView::OnOperBlue(){m_nColorIndex=2;//改变字体颜色Invalidate();}执行结果:可以通过菜单项来改变“HelloWorld!”字符的颜色。(8)处理显示多个菜单项(ON_COMMAND_RANGE)方法2在T10-MenuView.h中声明ON_COMMAND_RANGE消息的处理函数OnColorChange:afx_msgvoidOnColorChange(UINTnID);在T10-MenuView.cpp中完成消息映射:ON_COMMAND_RANGE(ID_OPER_RED,ID_OPER_BLUE,OnColorChange)…voidCT10MenuView::OnColorChange(UINTnID){m_nColorIndex=nID-ID_OPEN_RED;//改变字体颜色Invalidate();}执行结果:可以通过菜单项来改变“HelloWorld!”字符的颜色。(9)处理显示多个菜单项标记(ON_UPDATE_COMMAND_UI_RANGE)ON_UPDATE_COMMAND_UI_RANGE消息在选中的菜单项前加标记在T10-MenuView.h中声明ON_UPDATE_COMMAND_UI_RANGE消息的处理函数:afx_msgvoidOnUpdateColorChange(CCmdUI*pCmdUI);在T10-MenuView.cpp中完成消息映射:ON_UPDATE_COMMAND_UI_RANGE(ID_OPER_RED,ID_OPER_BLUE,OnUpdateColorChange)…在My_ResView.cpp中,添加OnUpdateColorChange函数,并加入以下代码:voidCMy_ResView::OnUpdateColorChange(CCmdUI*pCmdUI){//显示标记“.”pCmdUI-SetRadio(m_nColorIndex==(pCmdUI-m_nID-ID_OPER_RED));}执行结果:显示颜色菜单项的状态与实际显示字符串的颜色一致,通过菜单项前面的“•”标记来体现。[例11-1]:小结操作步骤类函数与变量创建单文档项目文件My_Res编辑主菜单IDR_MAINFARME添加菜单项声明视图类成员变量CMy_ResView.hm_nColorsm_nColorIndex,m_strShor,m_bShow初始化视图类成员变量CMy_ResViewCMy_ResView视图类输出显示CMy_ResViewOnDraw添加菜单项的COMMAND消息UPDATE_COMMAND_UI消息CMy_ResView二、工具条资源的应用在Windows应用程序中,工具条可以看作是图形化的菜单,是一种更快捷、更有效、更直观的人机交互方式。1工具条类的层次位置及其常用方法工具条由CWnd类派生的,它们都连接到一个Windows应用程序窗口。因此,CWnd的所有功能如创建、移动、显示和隐藏窗口等在用控制条工作时都是可用的。Create():创建一个工具条并把它附加到CToolBar对象上CreateEx():创建一个定义了边界的工具条并附加到CToolBar对象上SetSizes():设置按钮及位图大小SetHeight():设置工具条的高度LoadToolBar():装载工具条资源LoadBitmap():装载包含工具按钮图像的位图SetBitmap():设置位图图像SetButtons():设置按钮并使每个按钮与位图图像相关CToolBar的构造方法(1)增加工具条资源在资源视图中选择Toolbar资源,快捷菜单:插入Toolbar(2)将工具条添加到窗口中(系统自动完成)在应用程序的MainFra.h中加入工具条对象的成员变量在MainFrame.cpp的OnCreate()函数中调用工具条类的Create()或CreateEx()成员函数创建该工具条,并调用LoadToolBar()成员函数加载工具条。2加入用户自定义的工具条3对工具条进行操作创建完成工具条后,可调用工具条类中的成员函数对工具条进行操作,例如设定工具条风格,在窗口中移动工具条,控制工具条的显隐等。当鼠标光标在按钮上暂停时,显示工具提示和命令描述,并设定工具条的大小是可变的。m_wndToolBar.SetBarStyle(CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);可在程序中设置允许用户在程序运行中在框架窗口内移动工具条。这是通过调用CToolBar::EnableDocking和CFrame::EnableDocking来实现的。【例10-2】在上例的基础上添加工具条,工具条中包含四个按钮,分别对应菜单的“显示”、“红色”、“绿色”和“蓝色”菜单项。该工具条可以在窗口中任意位置停靠,当鼠标停留在工具条按钮上时,将显示该按钮的功能。(1)添加工具条资源在资源视图中选择Toolbar资源,快捷菜单:插入Toolbar。工具条ID:IDR_TOO

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功