下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、慢慢看吧:简要说明: 信息产业部电子第二十二研究所青岛分所郎锐摘要:本文介绍了在对话框程序基础上通过程序控制来动态添加工具条和状态条的实现过程和方法。一、 引言对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。虽然在Visual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但Visual C+ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。二、 工
2、具条的实现过程MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC对其做了过多的封装,以至无法了解内部的一些核心技术。因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI应用程序接口来实现的。在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。但MFC也为其留有接口:CWnd窗口类提供的G
3、etSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。由于对话框和状态栏属于程序界面的一部分,需要程序启动时就显示出来,因此获取句柄的代码和后面创建显示工具条、状态栏的全部代码都应当放在对话框初始化消息WM_INITDIALOG的响应函数OnInitDialog()中进行:HWND hDlg=GetSafeHwnd();HINSTANCE hInstance=AfxGetInstanceHandle(); 对于待添加的工具条按钮可以根据情况细分为两种:一种是Windows标准的一些工具条按钮比如打开文件、打印预览、在
4、线帮助等等,这类工具条按钮可以直接使用预定义好的按钮图标的ID号,在VC自带的CommCtrl.h头文件中有详细定义;另一种就是用户自己添加的工具栏按钮,只能由用户在资源视图中为其指定相应的图标。不论是那种工具条按钮的创建都是通过对TBBUTTON结构的设置来决定每一个工具条按钮的状态,对于第一个填充好的工具条按钮可以用CreateToolbarEx()来直接将其加入到工具条上,并返回指向工具条的窗口句柄,而对于以后工具条按钮的添加则只能通过向工具条发送TB_ADDBUTTONS消息来实现:/填充工具条按钮结构:TBBUTTON ptoolbar30=STD_HELP, /指定Windows的
5、标准帮助图标MU_ONE, /工具条按钮的IDTBSTATE_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
6、_FLAT|CCS_ADJUSTABLE,/指定工具条的创建风格IDB_TOOLBAR,/预定义的工具条资源ID30,HINST_COMMCTRL, /包含图片资源的可执行文件的实例句柄IDB_STD_SMALL_COLOR,/图片的资源IDptoolbar, /待添加的按钮2, /加入到工具条的按钮的个数0,0,0,0,sizeof(TBBUTTON);/从IDR_TOOLBAR1资源中装载按钮图标到对话框的工具条上TBADDBITMAP tab;tab.hInst=hInstance;tab.nID=IDR_TOOLBAR1;iBmp=:SendMessage(hToolsWindow,T
7、B_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开始记数的按
8、钮图象的索引;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开始技术的
9、按钮字串的索引。下面这段代码用于向工具条添加自定义的工具条按钮: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(hT
10、oolsWindow,TB_ADDBUTTONS,(WPARAM)1,(LPARAM)&tb);三、 状态栏的实现状态栏的实现与工具条的实现相比非常简单,只需在CreateStatusWindow()函数中对其参数进行设置即可实现:HWND hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_BORDER,TEXT("状态栏"),/显示在状态栏上的信息hDlg, /父窗口句柄IDS_STATUS); /预定义的资源ID 此时创建的状态栏只是一个位于对话框底部的长条,如需要将其分割为几部分可以在数组中设定好分
11、割点的X坐标,然后通过向状态栏发送SB_SETPARTS消息即可,该消息的wParam参数指定了要将状态栏分割为几部分,lParam参数指定了各分割点的坐标值:int pint4=110,250,300,-1;/110,250,300设定间隔:SendMessage(hStatusWindow,SB_SETPARTS,4,(LPARAM)pint);如需向分割后的状态栏内填写信息,可以通过hStatusWindow向状态条发送消息SB_SETTEXT来完成,该消息的两个参数分别用来标识在第几个窗格显示和待显示的信息内容::SendMessage(hStatusWindow,SB_SETTEXT,1,(LPARAM)TEXT("信息一");小结:本文以SDK的方式实现了在MFC对话框程序下工具条和状态栏的动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能仪器设备 课程设计
- 整数规划建模课程设计
- 楼盖单向板课程设计
- 2024年企业兼职客户服务专员聘用合同3篇
- 江苏省各地2025届高考仿真模拟数学试卷含解析
- 2024年度建筑工程内部承包合同书2篇
- 江西省赣州市崇义中学2025届高三压轴卷英语试卷含解析
- 北京海淀2025届高考仿真卷英语试卷含解析
- 广东省高州四中2025届高三3月份第一次模拟考试英语试卷含解析
- 2025届黑龙江省哈尔滨市第三中学高考英语五模试卷含解析
- 硅藻泥墙面施工合同
- 五年级上册书法教案
- 品管圈提高呼吸内科患者痰培养标本及时送检率品管圈汇报书课件模板
- 三方安全管理协议书模板
- 火车司机职业生涯规划总结报告
- 广元市2024年专业技术人员公需科目继续教育试卷及参考答案
- 2024政府采购评审专家考试真题库及答案
- 2024版《隐患排查标准手册》(附检查依据)
- 脊髓肿瘤的护理查房
- (正式版)SHT 3115-2024 石油化工管式炉轻质浇注料衬里工程技术规范
- (完整版)合同能源管理合同范本
评论
0/150
提交评论