前言:基于MFC based DLG实现,环境:VC++ 6.0
这只是CButtonST_demo中的一个小例子的具体讲解,这个DEMO实现了按钮所需要的所有功能,大家有兴趣可以去研究源码,地址:
http://download.csdn.net/detail/harvic880925/4409160
正文:
新建一个MFC based DLG的工程,命名为:TryMenu_1
实现效果如图:
一、工具条的创建与加载
其中整个Menu资源的ID号为:IDR_MENU1,第一个菜单项“one”的ID号为:IDM_1,第二个菜单项“two”的ID号为:“IDM_2”
2、用工具条制作工具制作一个工具条,制作好的工具条文件如图:
工具条制作工具的下载地址:http://download.csdn.net/detail/harvic880925/4582596
然后在资源视图中新建一个ToolBar资源,保存之后,到工程下的res文件夹下,找到生成的bmp文件,然后用我们的toolbar图像覆盖这个图像,这里要注意一点是,如果我们制作的toolbar不是16*16的,在VC++中将会打不开,解决办法也很简单,保存成16*16的图像重新覆盖就可以了。
在VC++中将工具栏中第一个图的ID设为:IDM_1,第二个设置为:IDM_2;即跟菜单项设置为相同的ID。
3、加载btton中显示的位图图像,ID设为:IDI_ICON1;
二、按钮创建
1、将Btn.h,Btn.cpp,BCMenu.h,BCMenu.cpp全部加载到工程中,并在CTryMenu_1Dlg.h中添加
#include "BtnST.h" #include "BCMenu.h"
2、在DLG中添加一个按钮控件,并关联一个变量,命名为:m_menuBtn,这时classWizard会在CTryMenu_1Dlg头文件中,为我们添加上一行代码:
CButton m_menuBtn;
这时我们将这行代码注释掉,改为
CButtonST m_menuBtn;
3、在CTryMenu_1Dlg的OnInitDlg()中添加如下代码:
this->m_menuBtn.SetMenu(IDR_MENU1,this->m_hWnd,true,IDR_TOOLBAR1); this->m_menuBtn.SetIcon(IDI_ICON1); this->m_menuBtn.SetFlat(TRUE);
至此实现了,所有开头所示的功能;
标注:该工程在VS2008中编译不会通过,总是在VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,nm.cbSize,&nm,0));这句产生异常
解决办法是:在BCMenu.cpp中查找nm.cbSize = sizeof (NONCLIENTMETRICS);将所有的这条语句改为:nm.cbSize = sizeof (NONCLIENTMETRICS)-sizeof(nm.iPaddedBorderWidth);就可以成功编译了。
源码地址:
http://download.csdn.net/detail/harvic880925/4582837
代码不收分,仅供交流,有需要的朋友可以下载!
本文原创,如需转载请标明出处哦!