为对话框程序添加工具条和状态栏-界面类编程-VC

转载 2006年06月25日 20:26:00
一、 引言





   对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。虽然在Visual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但Visual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。





   二、 工具条的实现过程





   MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC对其做了过多的封装,以至无法了解内部的一些核心技术。因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI应用程序接口来实现的。在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。由于对话框和状态栏属于程序界面的一部分,需要程序启动时就显示出来,因此获取句柄的代码和后面创建显示工具条、状态栏的全部代码都应当放在对话框初始化消息WM_INITDIALOG的响应函数OnInitDialog()中进行:





HWND hDlg=GetSafeHwnd();


HINSTANCE hInstance=AfxGetInstanceHandle();





   对于待添加的工具条按钮可以根据情况细分为两种:





   一种是Windows标准的一些工具条按钮比如打开文件、打印预览、在线帮助等等,这类工具条按钮可以直接使用预定义好的按钮图标的ID号,在VC自带的CommCtrl.h头文件中有详细定义;





   另一种就是用户自己添加的工具栏按钮,只能由用户在资源视图中为其指定相应的图标。不论是那种工具条按钮的创建都是通过对TBBUTTON结构的设置来决定每一个工具条按钮的状态,对于第一个填充好的工具条按钮可以用CreateToolbarEx()来直接将其加入到工具条上,并返回指向工具条的窗口句柄,而对于以后工具条按钮的添加则只能通过向工具条发送TB_ADDBUTTONS消息来实现:





……


//填充工具条按钮结构:


TBBUTTON ptoolbar[30]={{STD_HELP, //指定Windows的标准帮助图标


MU_ONE, //工具条按钮的ID


TBSTATE_ENABLED, //可用状态


TBSTYLE_BUTTON, //指定创建一个可以下按的按钮


0, //保留,由应用程序定义该参数意义


0}, //按钮字串索引


//创建一个分割按钮用的竖线


{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}};





//在对话框上动态创建工具条,并添加工具条按钮:


HWND hToolsWindow=::CreateToolbarEx(hDlg, //指定对话框为父窗口,将工具条创建在对话框上


WS_CHILD|WS_VISIBLE|TBSTYLE_WRAPABLE|TBSTYLE_TOOLTIPS|


TBSTYLE_FLAT|CCS_ADJUSTABLE,//指定工具条的创建风格


IDB_TOOLBAR,//预定义的工具条资源ID


30,HINST_COMMCTRL, //包含图片资源的可执行文件的实例句柄


IDB_STD_SMALL_COLOR,//图片的资源ID


ptoolbar, //待添加的按钮


2, //加入到工具条的按钮的个数


0,0,0,0,sizeof(TBBUTTON));


……


//从IDR_TOOLBAR1资源中装载按钮图标到对话框的工具条上


TBADDBITMAP tab;


tab.hInst=hInstance;


tab.nID=IDR_TOOLBAR1;


iBmp=::SendMessage(hToolsWindow,TB_ADDBITMAP,(WPARAM)3,(LPARAM)&tab);





   向工具条添加工具条按钮的关键在于对TBBUTTON数据结构的填充,该数据结构也是在CommCtrl.h头文件中定义的,原形为:





typedef struct _TBBUTTON {


int iBitmap;


int idCommand;


BYTE fsState;


BYTE fsStyle;


DWORD dwData;


int iString;


} TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;








   该结构的数据成员包含了处在工具条里的按钮的相关信息:成员iBitmap是从0开始记数的按钮图象的索引;idCommand标识了匹配的按钮,当按钮被按下产生WM_COMMAND消息的时候会用到该标识;fsState指定了按钮的状态标志,可以是以下8种标志的逻辑组合TBSTATE_CHECKED、TBSTATE_ELLIPSES、TBSTATE_ENABLED、TBSTATE_HIDDEN、TBSTATE_INDETERMINATE、TBSTATE_MARKED、TBSTATE_PRESSED、TBSTATE_WRAP。至于以上各标志的具体含义在MSDN的在线帮助中有详细说明;fsStyle成员指定了按钮的风格;dwData是应用程序定义的值,通常为0;iString为从0开始技术的按钮字串的索引。下面这段代码用于向工具条添加自定义的工具条按钮:





TBBUTTON tb;


tb.iBitmap=iBmp+0;


tb.idCommand=MU_TWO;


tb.fsState=TBSTATE_ENABLED;


tb.fsStyle=TBSTYLE_BUTTON;


tb.dwData=0;


tb.iString=0;





   完成对TBBUTTON结构的设置后可以通过窗口句柄hToolsWindow向工具条发送TB_ADDBUTTONS消息来添加按钮到工具条,如想添加按钮之间的分割条,只需将TBBUTTON结构的fsStyle成员变量取值为TBSTYLE_SEP即可:





::SendMessage(hToolsWindow,TB_ADDBUTTONS,(WPARAM)1,(LPARAM)&tb);





   三、 状态栏的实现





   状态栏的实现与工具条的实现相比非常简单,只需在CreateStatusWindow()函数中对其参数进行设置即可实现:





HWND hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_BORDER,


TEXT("状态栏"),//显示在状态栏上的信息


hDlg, //父窗口句柄


IDS_STATUS); //预定义的资源ID





   此时创建的状态栏只是一个位于对话框底部的长条,如需要将其分割为几部分可以在数组中设定好分割点的X坐标,然后通过向状态栏发送SB_SETPARTS消息即可,该消息的wParam参数指定了要将状态栏分割为几部分,lParam参数指定了各分割点的坐标值:





int pint[4]={110,250,300,-1};//110,250,300设定间隔


::SendMessage(hStatusWindow,SB_SETPARTS,4,(LPARAM)pint);





   如需向分割后的状态栏内填写信息,可以通过hStatusWindow向状态条发送消息SB_SETTEXT来完成,该消息的两个参数分别用来标识在第几个窗格显示和待显示的信息内容:





::SendMessage(hStatusWindow,SB_SETTEXT,1,(LPARAM)TEXT("信息一"));


……

相关文章推荐

对话框UI接口设计(菜单、工具条和状态栏)

1,给对话框添加菜单     a)在工程中新建菜单资源(IDR_MAINFRAME)。     b)在资源视图中,右击窗体资源,在属性对话框中选择菜单选项。     c)在下拉菜单中,选择IDR...

VC 2010 + MFC : 在对话框里面加入工具条CMFCToolBar

VC 2010 + MFC : 在对话框里面加入工具条CMFCToolBar By:章永辉              VC 2010 + MFC 新库的资料很少,以下给出本人的实现方...

【远控编写09】客户端界面的设计和编写--为对话框添加入工具条

一.基础知识: 1.工具条类: CToolBar.(在MSDN中查看其成员Member) ①CToolBar::CreateEx Call this function to create a W...
  • ypist
  • ypist
  • 2013-02-13 16:58
  • 2496

vc应用程序——个性化的工具条图标

工具图形框架mfcimportgoogle   1、首先,提供一些最好的图标,大家可以省去自己绘画图标的功夫,可以从繁琐的绘图工作中解脱出来。 ToYcon 在线网页转换PNG-ICO...

对话框添加菜单,工具条

  • 2013-08-07 18:52
  • 5.35MB
  • 下载

MFC 在对话框中添加工具条

1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR12.在主程序的.h文件中加入变量: CToolBar m_wndtoolbar;//添加...

对话框中添加工具条

在对话框中添加工具条主要有三个任务: 1、创建工具条按钮; 2、为按钮指定图标; 3、给按钮添加响应事件。         下面将利用资源管理器(也可以通过代码直接创建,这里占时不讨论...

MFC的工具条和状态栏

 Windows控制窗口 Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(Tool...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)