1、第第1212章章 设计用户界面设计用户界面第第1212章章 设计用户界面设计用户界面12.1 菜单和加速键菜单和加速键12.2 工具栏工具栏12.3 状态栏状态栏12.4 对话框栏对话框栏12.5 ReBar栏栏 12.6 通用对话框通用对话框习题习题 第第1212章章 设计用户界面设计用户界面12.1 菜单和加速键菜单和加速键12.1.1 使用菜单使用菜单1编辑菜单资源编辑菜单资源编辑由AppWizard自动生成的菜单资源,进行如下操作:(1)选择项目工作区的ResourceView标签,切换到资源视图。(2)选择菜单资源类型。(3)双击菜单资源IDR_MAINFRAME,将弹出菜单编辑窗口
2、。(4)编辑当前菜单。第第1212章章 设计用户界面设计用户界面删除:要删除某个菜单项或弹出菜单,可用鼠标单击该菜单或用上下光标键来回选择,然后按Del键删除。插入:如果插入新菜单项,可选定窗口中的空白菜单框后按回车。也可以在选择一个已有的菜单项时按Ins键,在该菜单项上方插入一个空白菜单项,然后双击该菜单项,将弹出Properties对话框,如图12-1所示。第第1212章章 设计用户界面设计用户界面图12-1菜单编辑器和属性对话框第第1212章章 设计用户界面设计用户界面调整:VisualStudio支持鼠标拖曳来调整菜单项位置。要调整菜单项位置,只需要选中某菜单项并将其拖至适当位置即可。
3、各菜单项属性设置如下:IDCaptionPromptID_TEST_HELLO&HelloSayhellotoyou!ID_COLOR_RED&RedThecolorisRed.ID_COLOR_GREEN&GreenThe color isGreenID_COLOR_BLUE&BlueThecolorisBlue第第1212章章 设计用户界面设计用户界面2处理菜单项定义命令函数处理菜单项定义命令函数操作如下:(1)从View菜单中选择ClassWizard,DeveloperStudio将弹出MFCClassWizard对话框,如图12-2所示。第第1212章章 设计用户界面设计用户界面图1
4、2-2用ClassWizard增加菜单消息成员函数映射第第1212章章 设计用户界面设计用户界面(2)选择MessageMaps标签,在Classname下拉列表中选择CMainFrame类。(3)双击Memberfunctions列表中的OnTestHello,编辑OnTestHello成员函数(同理可编辑OnColorRed、OnColorGreen和OnColorBlue函数)。在OnTestHello成员函数体中加入语句如下:void CMainFrame:OnTestHello()/TODO:Add your command handler code hereAfxMessageBo
5、x(Hello!);第第1212章章 设计用户界面设计用户界面另外,在CHelloView:OnDraw(CDC*pDC)加入代码如下:voidCHelloView:OnDraw(CDC*pDC)CHelloDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedataherepDc-TextOut(0,0,Hello!);第第1212章章 设计用户界面设计用户界面下面再来编写OnColorRed、OnColorGreen和OnColorBlue三个函数。首先双击CMainFrame类名,在MainFrm.h中加
6、入数据成员,如下所示:classCMainFrame:publicCFrameWnd/Attributespublic:intm_nColor;enumRED=0,GREEN=1,BLUE=3;第第1212章章 设计用户界面设计用户界面加入数据成员后,还要对它进行初始化,初始化工作在CMainFrame()构造函数中完成。CMainFrame:CMainFrame()/TODO:addmemberinitializationcodeherem_nColor=RED;OnColorRed、OnColorGreen和OnColorBlue三个函数修改后的程序清单如下:voidCMainFrame:
7、OnColorRed()第第1212章章 设计用户界面设计用户界面/TODO:Addyourcommandhandlercodeherem_nColor=RED;AfxMessageBox(ThecolorisRed.);voidCMainFrame:OnColorGreen()/TODO:Addyourcommandhandlercodeherem_nColor=GREEN;AfxMessageBox(ThecolorisGreen.);第第1212章章 设计用户界面设计用户界面voidCMainFrame:OnColorBlue()/TODO:Addyourcommandhandlerco
8、deherem_nColor=BLUE;AfxMessageBox(ThecolorisBlue.);第第1212章章 设计用户界面设计用户界面3更新命令用户界面消息1)更新机制MFC应用程序框架引入了更新命令用户界面消息来专门解决这一问题。那么更新命令用户界面是如何工作的呢?对于每一个菜单项,将对应如下两种消息(参看图12-2):lCOMMAND;l UPDATE_COMMAND_UI。第第1212章章 设计用户界面设计用户界面2)用户界面更新机制编程操作如下:(1)激活ClassWizard,选择MessageMap标签。(2)在ObjectIDs列表中选择ID_COLOR_RED,在Me
9、ssages列表中双击UPDATE_COMMAND_UI条目,弹出AddMemberFunction对话框,单击OK按钮接收默认函数名为OnUpdateColorRed。第第1212章章 设计用户界面设计用户界面(3)编辑接口更新成员函数,程序清单如下所示:voidCMainFrame:OnUpdateColorRed(CCmdUI*pCmdUI)/TODO:Add your command update UIhandlercodeherepCmdUI-SetCheck(m_nColor=RED);第第1212章章 设计用户界面设计用户界面voidCMainFrame:OnUpdateColo
10、rGreen(CCmdUI*pCmdUI)/TODO:AddyourcommandupdateUIhandlercodeherepCmdUI-SetCheck(m_nColor=GREEN);voidCMainFrame:OnUpdateColorBlue(CCmdUI*pCmdUI)/TODO:AddyourcommandupdateUIhandlercodeherepCmdUI-SetCheck(m_nColor=BLUE);第第1212章章 设计用户界面设计用户界面现在编译运行Hello程序。当我们打开Test菜单时,如图12-3所示,在Red菜单项前已经打了一个钩。第第1212章章 设
11、计用户界面设计用户界面图12-3Hello程序运行结果第第1212章章 设计用户界面设计用户界面12.1.2 定义加速键定义加速键具体操作如下:(1)将项目工作区切换到资源视图,选择Accelerator资源类型,双击IDR_MAINFRAME加速键资源,打开加速键编辑窗口。(2)编辑加速键资源。在ID下拉列表框中选择AFX_ID_COLOR_RED,在Key一栏中输入R,选择Ctrl复选框和VirtKey单选按钮,以完成加速键设置,如图12-4所示。(3)关闭加速键编辑窗口。第第1212章章 设计用户界面设计用户界面图12-4加速键编辑窗口第第1212章章 设计用户界面设计用户界面12.2
12、工具栏工具栏12.2.1 工具栏类的结构及其方法工具栏类的结构及其方法CToolBar是由CControlBar类派生的,它在MFC类库中的层次位置如图12-5所示。第第1212章章 设计用户界面设计用户界面图12-5CToolBar类在MFC类库中的层次位置第第1212章章 设计用户界面设计用户界面下面是CToolBar类的定义:classCToolBar:publicCControlBarDECLARE_DYNAMIC(CToolBar)/Constructionpublic:CToolBar();第第1212章章 设计用户界面设计用户界面BOOLCreate(CWnd*pParentWn
13、d,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UINTnID=AFX_IDW_TOOLBAR);BOOLCreateEx(CWnd*pParentWnd,DWORDdwCtrlStyle=TBSTYLE_FLAT,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP,CRectrcBorders=CRect(0,0,0,0),UINTnID=AFX_IDW_TOOLBAR);voidSetSizes(SIZEsizeButton,SIZEsizeImage);/buttonsizeshouldbebiggert
14、hanimagevoidSetHeight(intcyHeight);第第1212章章 设计用户界面设计用户界面/callafterSetSizes,heightoverridesbitmapsizeBOOLLoadToolBar(LPCTSTRlpszResourceName);BOOLLoadToolBar(UINTnIDResource);BOOLLoadBitmap(LPCTSTRlpszResourceName);BOOLLoadBitmap(UINTnIDResource);BOOLSetBitmap(HBITMAPhbmImageWell);BOOLSetButtons(cons
15、tUINT*lpIDArray,intnIDCount);/lpIDArraycanbeNULLtoallocateemptybuttons第第1212章章 设计用户界面设计用户界面/Attributespublic:/standardcontrolbarthingsintCommandToIndex(UINTnIDFind)const;UINTGetItemID(intnIndex)const;virtualvoidGetItemRect(intnIndex,LPRECTlpRect)const;UINTGetButtonStyle(intnIndex)const;voidSetButton
16、Style(intnIndex,UINTnStyle);第第1212章章 设计用户界面设计用户界面/forchangingbuttoninfovoidGetButtonInfo(intnIndex,UINT&nID,UINT&nStyle,int&iImage)const;voidSetButtonInfo(intnIndex,UINTnID,UINTnStyle,intiImage);BOOLSetButtonText(intnIndex,LPCTSTRlpszText);CStringGetButtonText(intnIndex)const;voidGetButtonText(intnI
17、ndex,CString&rString)const;/fordirectaccesstotheunderlyingcommoncontrolCToolBarCtrl&GetToolBarCtrl()const;第第1212章章 设计用户界面设计用户界面/Implementationpublic:virtualCToolBar();virtualCSizeCalcFixedLayout(BOOLbStretch,BOOLbHorz);virtualCSizeCalcDynamicLayout(intnLength,DWORDnMode);virtualintOnToolHitTest(CPoi
18、ntpoint,TOOLINFO*pTI)const;virtualvoidOnUpdateCmdUI(CFrameWnd*pTarget,BOOLbDisableIfNoHndler);voidSetOwner(CWnd*pOwnerWnd);BOOLAddReplaceBitmap(HBITMAPhbmImageWell);virtualvoidOnBarStyleChange(DWORDdwOldStyle,DWORDdwNewStyle);第第1212章章 设计用户界面设计用户界面#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoid
19、Dump(CDumpContext&dc)const;#endifprotected:HRSRCm_hRsrcImageWell;/handletoloadedresourceforimagewell第第1212章章 设计用户界面设计用户界面HINSTANCEm_hInstImageWell;/instancehandletoloadimagewellfromHBITMAPm_hbmImageWell;/containscolormappedbuttonimagesBOOLm_bDelayedButtonLayout;/usedtomanagewhenbuttonlayoutshouldbed
20、oneCSizem_sizeImage;/currentimagesizeCSizem_sizeButton;/currentbuttonsizeCMapStringToPtr*m_pStringMap;/usedasCMapStringToUInt/implementationhelpersvoid_GetButton(intnIndex,TBBUTTON*pButton)const;第第1212章章 设计用户界面设计用户界面void_SetButton(intnIndex,TBBUTTON*pButton);CSizeCalcLayout(DWORDnMode,intnLength=-1)
21、;CSizeCalcSize(TBBUTTON*pData,intnCount);intWrapToolBar(TBBUTTON*pData,intnCount,intnWidth);voidSizeToolBar(TBBUTTON*pData,intnCount,intnLength,BOOLbVert=FALSE);第第1212章章 设计用户界面设计用户界面voidLayout();/calledforfordelayedbuttonlayout/AFX_MSG(CToolBar)afx_msgUINTOnNcHitTest(CPoint);afx_msgvoidOnNcPaint();a
22、fx_msgvoidOnPaint();afx_msgvoidOnNcCalcSize(BOOL,NCCALCSIZE_PARAMS*);afx_msgvoidOnWindowPosChanging(LPWINDOWPOS);afx_msgvoidOnSysColorChange();第第1212章章 设计用户界面设计用户界面afx_msgLRESULTOnSetButtonSize(WPARAM,LPARAM);afx_msgLRESULTOnSetBitmapSize(WPARAM,LPARAM);afx_msgLRESULTOnPreserveZeroBorderHelper(WPARA
23、M,LPARAM);afx_msgBOOLOnNcCreate(LPCREATESTRUCT);afx_msgBOOLOnEraseBkgnd(CDC*pDC);/AFX_MSGDECLARE_MESSAGE_MAP()LRESULTOnSetSizeHelper(CSize&size,LPARAMlParam);第第1212章章 设计用户界面设计用户界面构造方法用于建立Windows工具栏CToolBar对象,并在运行时将它们附加到框架窗口上,表12-l是CToolBar的方法。第第1212章章 设计用户界面设计用户界面表12-1 CToolBar的方法第第1212章章 设计用户界面设计用户
24、界面工具栏按钮的操作方法是用来处理某一工具栏按钮的,这些方法具体说明如表12-2所示。第第1212章章 设计用户界面设计用户界面表12-2 工具栏按钮的操作方法第第1212章章 设计用户界面设计用户界面下面介绍表12-l和表12-2中部分构造方法的功能。1Create()函数函数Create()函数的作用是创建并初始化工具栏对象。与其他创建过程类似,采用两步法生成:首先要声明对象,然后再调用初始化函数CToolBar:Create()生成工具栏对象。该函数原型为:BOOL Create(CWnd*pParentWnd,/pParentWnd为指向工具栏所在父窗口的指针第第1212章章 设计用户
25、界面设计用户界面DWORD dwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,/dwStyle为工具栏的风格,如表12-3所示UINT nIDAFX_IDW_TOOLBAR/nID表示工具栏子窗口的ID号);第第1212章章 设计用户界面设计用户界面表12-3 工具栏风格第第1212章章 设计用户界面设计用户界面2LoadToolBar()函数函数LoadToolBar()函数的作用是装载工具栏资源。首先调用初始化函数CToolBar:Create,然后再调用该函数装载资源。该函数原型为:BOOLLoadToolBar(LPCTSTRlpszResourcName);/
26、lpszResourcName为/字符串形式定义的资源BOOLLoadToolBar(UINTnIDResource);/nIDResource为整型形式定义的资源第第1212章章 设计用户界面设计用户界面3SetBarStyle()函数函数SetBarStyle()函数的作用是设置工具栏风格。如果在调用初始化函数CToolBar:Create时设置的工具栏风格不满足需要时,就可以再用这一函数进行设置。具体的工具栏风格与表12-l中的说明相同。如下述代码设定工具栏的风格为:当光标在按钮上暂停时,将显示工具提示和命令描述,并设定工具栏的大小是可变的。m_wndToolBar.SetBarSty1
27、e(CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);第第1212章章 设计用户界面设计用户界面4LoadBitmap()函数函数要将储存在位图资源中的按钮映像与程序的工具栏相连接,可以通过函数调用CToolBar:LoadBitmap()来实现。该函数原型为:BOOLLoadBitmap(LPCTSTRlpszResourceName);/lpszResourceName为/字符串形式定义的资源BOOLLoadBitmap(UINTnIDResource);/nIDResource为整型形式定义的资源如下述代码:ToolBar.LoadBitmap(ID
28、R_TOOLS);第第1212章章 设计用户界面设计用户界面5工具栏的停靠工具栏的停靠两函数的原型均如下:voidEnableDocking(DWORDdwStyle);其中,参数dwStyle为工具栏停靠风格,对CToolBar类其可取值如表12-4所示。6工具栏的显隐控制工具栏的显隐控制第第1212章章 设计用户界面设计用户界面表12-4 工具栏停靠风格第第1212章章 设计用户界面设计用户界面12.2.2 创建工具栏类实例创建工具栏类实例例12-2在Hello应用程序框架中添加一个设置颜色的工具栏,如图12-6所示。工具栏中各按钮功能如下:lR:弹出消息框显示“Thecolorisred
29、.”;l G:弹出消息框显示“Thecolorisgreen.”;l B:弹出消息框显示“Thecolorisblue.”。第第1212章章 设计用户界面设计用户界面图12-6设置颜色工具栏第第1212章章 设计用户界面设计用户界面创建一个工具栏一般需要以下几个步骤:(1)在项目中增加工具栏资源。(2)编辑工具栏。(3)为类CMainFrame加入一个CToolBar的受保护的成员变量m_colorToolBar。(4)在CMainFrame的OnCreate()函数中加入设置工具栏的特性的代码。第第1212章章 设计用户界面设计用户界面1工具栏的设计工具栏的设计1)增加工具栏资源(1)在系统
30、菜单(参见图12-1)中,选择Insert菜单中的Resource命令,显示InsertResource对话框,如图12-7所示。选择其中的Toolbar后,使其高亮显示,单击New按钮,这样就在资源文件ToolBar中增加了一项工具栏资源。(2)这时,在工作区窗口的ResourceView选项卡中,就可以看到新增的工具栏资源了,重新定义新增工具栏的ID为IDR_COLORTOOLBAR。工具栏作为程序的一个资源一般存放在资源脚本中,在程序运行时才调用。一般来说,工具栏的标识符ID在资源的头文件(Resource.h)中定义,例如:#define IDR_COLORTOOLBAR 132第第1
31、212章章 设计用户界面设计用户界面图12-7InsertResource对话框第第1212章章 设计用户界面设计用户界面(3)双击IDR_COLORTOOLBAR,则显示一个可编辑的工具栏,如图12-8所示。第第1212章章 设计用户界面设计用户界面图12-8工具栏编辑界面第第1212章章 设计用户界面设计用户界面2)工具栏按钮的编辑(1)加入工具栏按钮。(2)删除工具栏按钮。(3)分隔工具栏按钮。(4)改变按钮的属性。首先选中工具栏上的某个按钮(如第一个按钮),然后选择View菜单中的Properties命令,将显示ToolbarButtonProperties对话框,如图12-9所示。第
32、第1212章章 设计用户界面设计用户界面图12-9ToolbarButtonProperties对话框第第1212章章 设计用户界面设计用户界面2添加代码添加代码1)添加处理代码2)添加设置代码有如下三个地方需要添加工具栏代码:(1)首先为类CMainFrame加入一个成员变量m_colorToolBar。在头文件MainFrame中,加入以下代码:protected:/controlbarembeddedmembersCToolBarm_colorToolBar;这段代码为类CMainFrame加入一个受保护的成员变量m_colorToolBar。第第1212章章 设计用户界面设计用户界面(
33、2)加入代码以实现使工具栏可见的功能。下面的一段代码出现在MainFrm.cpp文件中,此代码用于设置工具栏的特性,使用户在启动程序时能看见它。intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(!m_colorToolBar.Create(this)|!m_colorToolBar.LoadToolBar(IDR_TOOLBAR1)第第1212章章 设计用户界面设计用户界面TRACE0(Failedtocreatestatusbarn);return-1;/failtocreate3)添加浮动代码为了使工具栏成为可“浮动”工具栏,即在
34、应用程序窗口中,把它从一个地方移动到另一个地方,需要添加一些其他代码。仍可在CMainFrame的OnCreate()函数中修改并加入以下代码:第第1212章章 设计用户界面设计用户界面intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(!m_colorToolBar.Create(this,CBRS_FLOATING|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC|CBRS_BOTTOM|CBRS_GRIPPER|WS_CHILD|WS_VISIBLE)|!m_colorToolBar.LoadT
35、oolBar(IDR_COLORTOOLBAR)第第1212章章 设计用户界面设计用户界面TRACE0(Failedtocreatestatusbarn);return-1;/failtocreate/TODO:Removethisifyoudontwanttooltipsoraresizeabletoolbarm_colorToolBar.EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_colorToolBar);工具栏应用程序到现在为止,已经全部编写完毕,经过编译后,运行结果如图12-10所示。第第1212章章 设计用户界面设计用户界面图12
36、-10含有“浮动”工具栏的Hello程序运行结果第第1212章章 设计用户界面设计用户界面12.3 状态栏状态栏12.3.1 状态栏的结构及其方法状态栏的结构及其方法CStatusBar类的定义中给出了该类的结构,我们可以从中大致了解CStatusBar类的功能。VC+在Afxext.h中定义CStatusBar类的结构,下面是CStatusBar类的定义:classCStatusBar:publicCControlBarDECLARE_DYNAMIC(CStatusBar)第第1212章章 设计用户界面设计用户界面/Constructionpublic:CStatusBar();BOOLCr
37、eate(CWnd*pParentWnd,DWORD dwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);BOOLCreateEx(CWnd*pParentWnd,DWORDdwCtrlStyle=0,第第1212章章 设计用户界面设计用户界面DWORD dwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);BOOL SetIndicators(const UINT*lpIDArray,intnIDCount);/Attribut
38、espublic:voidSetBorders(LPCRECTlpRect);void SetBorders(int cxLeft=0,int cyTop=0,intcxRight=0,intcyBottom=0);第第1212章章 设计用户界面设计用户界面/standardcontrolbarthingsintCommandToIndex(UINTnIDFind)const;UINTGetItemID(intnIndex)const;void GetItemRect(int nIndex,LPRECT lpRect)const;/specifictoCStatusBarvoid GetPan
39、eText(int nIndex,CString&rString)const;CStringGetPaneText(intnIndex)const;BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);第第1212章章 设计用户界面设计用户界面void GetPaneInfo(int nIndex,UINT&nID,UINT&nStyle,int&cxWidth)const;voidSetPaneInfo(intnIndex,UINTnID,UINTnStyle,intcxWidth);UINTGetPaneStyle(i
40、ntnIndex)const;voidSetPaneStyle(intnIndex,UINTnStyle);/fordirectaccesstotheunderlyingcommoncontrolCStatusBarCtrl&GetStatusBarCtrl()const;第第1212章章 设计用户界面设计用户界面/OverridablesvirtualvoidDrawItem(LPDRAWITEMSTRUCT);/Implementationpublic:virtualCStatusBar();virtual CSize CalcFixedLayout(BOOL bStretch,BOOLb
41、Horz);BOOLPreCreateWindow(CREATESTRUCT&cs);BOOLAllocElements(intnElements,intcbElement);void CalcInsideRect(CRect&rect,BOOL bHorz)const;virtualvoidOnBarStyleChange(DWORDdwOldStyle,DWORDdwNewStyle);第第1212章章 设计用户界面设计用户界面#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoidDump(CDumpContext&dc)const;vo
42、idEnableDocking(DWORDdwDockStyle);#endifvirtual void OnUpdateCmdUI(CFrameWnd*pTarget,BOOLbDisableIfNoHndler);protected:第第1212章章 设计用户界面设计用户界面intm_nMinHeight;AFX_STATUSPANE*_GetPanePtr(intnIndex)const;voidUpdateAllPanes(BOOLbUpdateRects,BOOLbUpdateText);virtualBOOLOnChildNotify(UINTmessage,WPARAM,LPAR
43、AM,LRESULT*);/AFX_MSG(CStatusBar)afx_msgUINTOnNcHitTest(CPoint);afx_msgvoidOnNcCalcSize(BOOL,NCCALCSIZE_PARAMS*);第第1212章章 设计用户界面设计用户界面afx_msgvoidOnNcPaint();afx_msgvoidOnPaint();afx_msgvoidOnSize(UINTnType,intcx,intcy);afx_msgvoidOnWindowPosChanging(LPWINDOWPOS);afx_msgLRESULTOnSetText(WPARAMwParam,
44、LPARAMlParam);afx_msgLRESULTOnGetText(WPARAMwParam,LPARAMlParam);第第1212章章 设计用户界面设计用户界面afx_msgLRESULTOnGetTextLength(WPARAMwParam,LPARAMlParam);afx_msgLRESULTOnSetMinHeight(WPARAMwParam,LPARAMlParam);/AFX_MSGDECLARE_MESSAGE_MAP();第第1212章章 设计用户界面设计用户界面12.3.2 利用利用AppWizard自动创建状态栏自动创建状态栏利用AppWizard生成应用程
45、序项目时,只要选择了初始化状态栏选项,AppWizard便可自动生成状态栏的内容。它包括:1为为CMainFrame类定义状态栏成员类定义状态栏成员定义如下:classCMainFrame:publicCFrameWndprotected:/controlbarembeddedmembersCStatusBarm_wndStatusBar;;第第1212章章 设计用户界面设计用户界面2定义把状态栏分割为窗格的外部静态数组定义把状态栏分割为窗格的外部静态数组在MainFrame.cpp文件中有以下一段代码:staticUINTindicators=ID_SEPARATOR,/statusline
46、indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;第第1212章章 设计用户界面设计用户界面3创建状态栏窗口创建状态栏窗口状 态 栏 窗 口 的 创 建 与 工 具 栏 一 样,也 是 在 CMainFrame:OnCreate()函数中完成的。代码如下:intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)return-1;if(!m_wndStatusBar.Create(this)|
47、!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)第第1212章章 设计用户界面设计用户界面TRACE0(Failedtocreatestatusbarn);return-1;/failtocreatereturn0;第第1212章章 设计用户界面设计用户界面12.3.3 自定义状态栏实例自定义状态栏实例例12-3下面我们将对Hello程序中已有的状态栏m_wndStatusBar进行修改,增加以下内容:(1)当鼠标在窗口工作区移动时,在状态栏的第一窗格显示鼠标位置X、Y坐标。(2)在状态栏的第5窗格
48、实时显示当前时间(hh:mm:ss)。第第1212章章 设计用户界面设计用户界面具体的操作步骤如下:1修改修改indicators数组数组在MainFrm.cpp文件中,在已生成的数组中增加一个元素ID_INDICATOR_TIME。staticUINTindicators=ID_SEPARATOR,/statuslineindicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,ID_INDICATOR_TIMER,;第第1212章章 设计用户界面设计用户界面2定义新增加的定义新增加的ID选择菜单中ViewResourceSym
49、bols命令,将弹出ResourceSymbols对话框,如图12-11所示。第第1212章章 设计用户界面设计用户界面图12-11ResourceSymbols对话框第第1212章章 设计用户界面设计用户界面单击New按钮,将弹出NewSymbol对话框,如图12-12所示。12-12NewSymbol对话框第第1212章章 设计用户界面设计用户界面3为新增为新增ID定义字符串资源定义字符串资源在Caption文本框中输入字符串00:00:00,如图12-13所示。第第1212章章 设计用户界面设计用户界面图12-13StringProperties对话框第第1212章章 设计用户界面设计用
50、户界面4确认已经自动生成的内容存在确认已经自动生成的内容存在需要确认的内容其实是AppWizard已经生成的、不需要修改的部分,包括:(1)在CMainFrame类定义了成员m_wndStatusBar。classCMainFrame:publicCFrameWndprotected:CStatusBarm_wndStatusBar;第第1212章章 设计用户界面设计用户界面现在需要将m_wndStatusBar的访问属性改成public,即改为:public:CStatusBarm_wndStatusBar;第第1212章章 设计用户界面设计用户界面(2)在CMainFrame:OnCrea
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922