对话框程序中使用工具栏

转载 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类派生。

 

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

 

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

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

相关文章推荐

使用Eclipse RCP进行桌面程序开发(二):菜单、工具栏和对话框

在使用Eclipse RCP进行桌面程序开发(一):快速起步中,我们通过Eclipse的插件开发向导,逐步建立了一个RCP应用程序,但是,这个程序没有任何功能,难以激起我们学习的兴趣。在这一节,我们将...

使用Eclipse RCP进行桌面程序开发(二):菜单、工具栏和对话框

在使用Eclipse RCP进行桌面程序开发(一):快速起步中,我们通过Eclipse的插件开发向导,逐步建立了一个RCP应用程序,但是,这个程序没有任何功能,难以激起我们学习的兴趣。在这一节,我们将...

带有工具栏的对话框应用程序

  • 2010年07月01日 09:05
  • 68KB
  • 下载

VC 对话框程序添加工具栏按钮图标及其按钮tooltip

在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,很多资源都需要自己手动添加。最近在开发一个程序时,想尝试在对话框程序里面添加 工具栏 及其 按钮tooltip,于是便有了这篇文章,希...
  • xbmoxia
  • xbmoxia
  • 2014年10月16日 11:50
  • 2736

[VC]基于对话框程序,自定义工具栏(支持真彩色图标,可添加文字)

转载自 ewook最终编辑 ewook应该是一个老生常谈的问题了,仍然决定写一写的原因是:在网上搜一搜,讲得有效易懂的还真没发现(可能是大虾们都懒得去写。。。)动机:传统的VC工具栏只支持16色的图标...

为属性页中的对话框添加工具栏,及添加工具栏tool tip & Update command ui

1. 为对话框添加工具栏。    为 CPropertyPage 或者CDialog 的 派生类添加一个成员 CToolBar m_ToolBar. CImageList m_imageList;CB...

带菜单 工具栏 状态栏的对话框

  • 2009年07月29日 16:11
  • 54KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框程序中使用工具栏
举报原因:
原因补充:

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