对话框程序中使用工具栏

转载 2012年06月19日 23:04:26

首先声明图像列表对象和工具栏对象,即

  1. //图像列表控件   
  2. CImageList m_ImageList;  
  3. //工具条   
  4. CToolBar m_ToolBar;  
 

然后下面的代码会实现在对话框程序里创建一个工具栏的效果,即

  1. m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,1,1);  
  2. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_MANAGE));  
  3. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_UPDATE));  
  4. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SECURITY));  
  5. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SET));  
  6. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_QUIT));  
  7. UINT btnarray[5]={0};  
  8. for (int i=0;i<5;i++)  
  9. {  
  10.     btnarray[i]=3000+i;  
  11. }  
  12. 设置工具条信息  
  13. m_ToolBar.Create(this);  
  14. m_ToolBar.SetButtons(btnarray,5);  
  15. m_ToolBar.SetButtonText(0,_T("管理"));  
  16. m_ToolBar.SetButtonInfo(0,ID_MANAGE,TBSTYLE_BUTTON,0);  
  17. m_ToolBar.SetButtonText(1,_T("更新"));  
  18. m_ToolBar.SetButtonInfo(1,ID_UPDATE_MANAGE,TBSTYLE_BUTTON,1);  
  19. m_ToolBar.SetButtonText(2,_T("安全"));  
  20. m_ToolBar.SetButtonInfo(2,ID_SECURITY,TBSTYLE_BUTTON,2);  
  21. m_ToolBar.SetButtonText(3,_T("设置"));  
  22. m_ToolBar.SetButtonInfo(3,ID_SET,TBSTYLE_BUTTON,3);  
  23. m_ToolBar.SetButtonText(4,_T("退出"));  
  24. m_ToolBar.SetButtonInfo(4,ID_QUIT,TBSTYLE_BUTTON,4);  
  25. 设置工具条大小信息  
  26. m_ToolBar.GetToolBarCtrl().SetButtonWidth(64,64);  
  27. m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);  
  28. m_ToolBar.SetSizes(CSize(64,64),CSize(32,32));  
  29. RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  
 

但是这样添加的工具栏不会自动生成按钮响应事件,需要我们自己去写事件响应函数了。

不过其实看一下MFC本身是怎么写的照葫芦画瓢就行了,只不过需要为每个按钮自定义一个ID的值。

首先为每个按钮自定义一个ID的值。

  1. #define IDM_ABOUTBOX                    0x0010  
  2. #define IDD_ABOUTBOX                    100  
  3. #define IDS_ABOUTBOX                    101  
  4. #define IDD_CHECKUPDATEALPHA1_DIALOG    102  
  5. #define IDR_MAINFRAME                   128  
  6. #define IDR_MENU                        129  
  7. #define IDI_ICON_ADD                    131  
  8. #define IDI_ICON_CHECK                  132  
  9. #define IDI_ICON_CHECKUPDATE            133  
  10. #define IDI_ICON_MANAGE                 135  
  11. #define IDI_ICON_QUIT                   137  
  12. #define IDI_ICON_SET                    138  
  13. #define IDI_ICON_TRASH                  139  
  14. #define IDI_ICON_UPDATE                 140  
  15. #define IDD_DIALOG_MANAGE               141  
  16. #define IDD_DIALOG_UPDATE_MANAGE        142  
  17. #define IDD_DIALOG_SET                  143  
  18. #define IDD_DIALOG_ADD                  144  
  19. #define IDD_DIALOG_MSG                  146  
  20. #define IDR_MSG                         147  
  21. #define IDD_DIALOG_SECURITY             148  
  22. #define IDI_ICON_SECURITY               149  
  23. #define IDI_ICON1                       150  
  24. #define IDI_ICON_SECURITYCHECK          150  
  25. #define IDC_LIST_UPDATE_MANAGE          1000  
  26. #define IDC_LIST_MANAGE                 1001  
  27. #define IDC_SET_RESET                   1002  
  28. #define IDC_SET_SET                     1003  
  29. #define IDC_SET_CLOSE                   1004  
  30. #define IDC_CHECK_STARTUP               1005  
  31. #define IDC_COMBO_TIME                  1006  
  32. #define IDC_CHECK_UPDATE_ONLINE         1007  
  33. #define IDC_STATIC_TIME                 1008  
  34. #define IDC_STATIC_ADD_TITLE            1014  
  35. #define IDC_STATIC_ADD_SITE             1015  
  36. #define IDC_BUTTON_ADD_ADD              1016  
  37. #define IDC_BUTTON_ADD_RESET            1017  
  38. #define IDC_BUTTON_ADD_CANCEL           1018  
  39. #define IDC_EDIT_ADD_TITLE              1019  
  40. #define IDC_EDIT_ADD_SITE               1020  
  41. #define IDC_STATIC_MSG                  1024  
  42. #define IDC_LIST1                       1025  
  43. #define ID_CHECKUPDATE_SHOW             32778  
  44. #define ID_CHECKUPDATE_MANAGE           32779  
  45. #define ID_CHECKUPDATE_UPDATE           32780  
  46. #define ID_CHECKUPDATE_SET              32781  
  47. #define ID_CHECKUPDATE_HELP             32782  
  48. #define ID_CHECKUPDATE_ABOUT            32783  
  49. #define ID_CHECKUPDATE_QUIT             32784  
  50. #define ID_MANAGE                       33000  
  51. #define ID_ADD                          33001  
  52. #define ID_TRASH                        33003  
  53. #define ID_CLOSE                        33004  
  54. #define ID_UPDATE_MANAGE                33005  
  55. #define ID_UPDATE                       33006  
  56. #define ID_CHECK                        33007  
  57. #define ID_SET                          33008  
  58. #define ID_QUIT                         33010  
  59. #define ID_SECURITY                     33011  
  60. #define ID_SECURITYCHECK                33012  
 

这些确实多了些,但是小弟是偷懒了,直接全部复制过来了。

不过看一下上面定义的那些IDI_ICON,IDR,IDS,IDC,IDD打头的宏定义就知道怎么回事了,其实在MFC中,自动为每个资源定义了宏。

然后在*.h中添加响应事件函数声明

  1. public:  
  2.     afx_msg void OnBnClickedManage();  
  3.     afx_msg void OnBnClickedUpdateManage();  
  4.     afx_msg void OnBnClickedSecurity();  
  5.     afx_msg void OnBnClickedSet();  
  6.     afx_msg void OnBnClickedQuit();  
  7.     afx_msg void OnCheckupdateShow();  
  8.     afx_msg void OnCheckupdateHelp();  
  9.     afx_msg void OnCheckupdateAbout();  
  10.     afx_msg void OnCheckupdateQuit();  
 

还要在*.cpp文件中添加两部分内容,一部分是消息映射部分,另一部分就是真正实现函数的代码部分

  1. BEGIN_MESSAGE_MAP(CCheckUpdatealpha1Dlg, CDialog)  
  2.     ON_WM_SYSCOMMAND()  
  3.     ON_WM_PAINT()  
  4.     ON_WM_QUERYDRAGICON()  
  5.     //}}AFX_MSG_MAP   
  6.     ON_BN_CLICKED(ID_MANAGE,&CCheckUpdatealpha1Dlg::OnBnClickedManage)  
  7.     ON_BN_CLICKED(ID_UPDATE_MANAGE,&CCheckUpdatealpha1Dlg::OnBnClickedUpdateManage)  
  8.     ON_BN_CLICKED(ID_SECURITY,&CCheckUpdatealpha1Dlg::OnBnClickedSecurity)  
  9.     ON_BN_CLICKED(ID_SET,&CCheckUpdatealpha1Dlg::OnBnClickedSet)  
  10.     ON_BN_CLICKED(ID_QUIT,&CCheckUpdatealpha1Dlg::OnBnClickedQuit)  
  11.     ON_COMMAND(ID_CHECKUPDATE_SHOW, &CCheckUpdatealpha1Dlg::OnCheckupdateShow)  
  12.     ON_COMMAND(ID_CHECKUPDATE_HELP, &CCheckUpdatealpha1Dlg::OnCheckupdateHelp)  
  13.     ON_COMMAND(ID_CHECKUPDATE_ABOUT, &CCheckUpdatealpha1Dlg::OnCheckupdateAbout)  
  14.     ON_COMMAND(ID_CHECKUPDATE_QUIT, &CCheckUpdatealpha1Dlg::OnCheckupdateQuit)  
  15.     ON_WM_TIMER()  
  16. END_MESSAGE_MAP()  
 

根据处理函数和处理过程的不同,MFC主要处理三类消息:

 

  • Windows消息,前缀以“WM_”打头,WM_COMMAND例外。Windows消息直接送给MFC窗口过程处理,窗口过程调用对应的消息处理函数。一般,由窗口对象来处理这类消息,也就是说,这类消息处理函数一般是MFC窗口类的成员函数。
  • 控制通知消息,是控制子窗口送给父窗口的WM_COMMAND通知消息。窗口过程调用对应的消息处理函数。一般,由窗口对象来处理这类消息,也就是说,这类消息处理函数一般是MFC窗口类的成员函数。
  • 命令消息,这是来自菜单、工具条按钮、加速键等用户接口对象的WM_COMMAND通知消息,属于应用程序自己定义的消息。通过消息映射机制,MFC框架把命令按一定的路径分发给多种类型的对象(具备消息处理能力)处理,如文档、窗口、应用程序、文档模板等对象。能处理消息映射的类必须从CCmdTarget类派生。

 

实现部分相信用过按钮自动生成事件的童鞋们都知道怎么回事了,这里就不一一列出来了。

 

最后实现的效果如下,贴图:

界面稍微丑陋了一点,但是总算是实现了我们需要的功能了!

MFC实现CListCtrl子项可编辑的简便操作

相信很多人用过MFC的新手都知道,MFC虽然封装了一些常用的控件,但不少控件真正使用起来,与个人的要求可能会有一些差别,总有一些功能不是很方便就能实现的,例如CTabCtrl(Tab控件)的颜色(涉及...
  • yangyunchenrt
  • yangyunchenrt
  • 2011年05月06日 10:49
  • 4924

在MFC对话框界面中添加工具栏,控制条

文章编号: 141751 - 最后修改: 2006年11月21日 - 修订: 5.1如何将控制条添加到在 MFC 中的对话框点击这里查看逐句中英文对照机器翻译查看机器翻译免责声明查看本文应用于的产品将...
  • aasmfox
  • aasmfox
  • 2010年11月17日 21:50
  • 4485

对话框程序中使用工具栏

前些日子一直在写一个小的软件,东西确实比较小,所以不想使用单文档的程序,其实也是因为对于单文档的程序感觉无从下手,还是对话框简单一些。但是日子过了一段时间,当规划者怎样使用工具栏的时候,还是费了一番力...
  • bitsjx
  • bitsjx
  • 2010年06月08日 15:18
  • 1026

给对话框添加菜单 工具栏 状态栏简易方法

先建立一个基于Dialog 的程序,我给他起了个名字叫:DlgMenuToolbar。一、如何往基于Dialog的程序添加菜单[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。[1...
  • qj840828
  • qj840828
  • 2008年10月17日 16:23
  • 5722

MFC之在对话框创建菜单、工具栏、状态栏

这篇博客主要解决3个问题: 1、如何在对话框资源上创建菜单,用菜单项控制工具栏和状态栏的显示与隐藏; 2、如何在对话框资源上创建工具栏,并实现工具栏上按钮的响应; 3、如何在对话框资源上创建状态栏,在...
  • GK_2014
  • GK_2014
  • 2015年06月03日 19:11
  • 4201

MFC对话框添加工具栏、菜单、状态栏

MFC对话框添加工具栏、菜单、状态栏添加工具栏: 1.对话框头文件中添加 CToolBar m_wndToolBar; 2.对话框初始化函数中添加 if(!m_wndToolBar.Create(th...
  • hu2703411
  • hu2703411
  • 2016年08月09日 15:42
  • 1387

MFC对话框中的工具栏、状态栏设计小结

对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已。对话框中建立工具栏的方法工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表...
  • lihui126
  • lihui126
  • 2015年05月26日 14:17
  • 3874

在对话框中插入 工具栏

一、技术要点分析  所有的Windows控件(包括工具栏、编辑框等)都派生自CWnd类,这就意味着,我们可以用窗口类的Create()函数把它们“创建”并显示到另一个窗口(例如对话框)上。把工具栏加入...
  • lltaoyy
  • lltaoyy
  • 2010年11月19日 21:18
  • 1978

使用对话框实现类似MFC浮动工具条

//CMainFrame.h增加下面3行 CDlgRightToolBar* m_pRightToolDlg;// 增加的浮动工具栏 void MoveRightToolDlgMi...
  • x82488059
  • x82488059
  • 2015年01月26日 17:04
  • 899

对话框中添加工具条

在对话框中添加工具条主要有三个任务: 1、创建工具条按钮; 2、为按钮指定图标; 3、给按钮添加响应事件。         下面将利用资源管理器(也可以通过代码直接创建,这里占时不讨论...
  • u010260855
  • u010260855
  • 2014年03月30日 11:01
  • 1134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框程序中使用工具栏
举报原因:
原因补充:

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