CButtonST中菜单按钮的构建

前言:基于MFC based DLG实现,环境:VC++ 6.0

这只是CButtonST_demo中的一个小例子的具体讲解,这个DEMO实现了按钮所需要的所有功能,大家有兴趣可以去研究源码,地址:

http://download.csdn.net/detail/harvic880925/4409160

正文:

新建一个MFC based DLG的工程,命名为:TryMenu_1

实现效果如图:

CButtonST中菜单按钮的构建_第1张图片

一、工具条的创建与加载

1、首先资源视图中新建一个Menu资源,如图:CButtonST中菜单按钮的构建_第2张图片

其中整个Menu资源的ID号为:IDR_MENU1,第一个菜单项“one”的ID号为:IDM_1,第二个菜单项“two”的ID号为:“IDM_2

2、用工具条制作工具制作一个工具条,制作好的工具条文件如图:CButtonST中菜单按钮的构建_第3张图片

工具条制作工具的下载地址: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中显示的位图图像CButtonST中菜单按钮的构建_第4张图片,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_1DlgOnInitDlg()中添加如下代码:

	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

代码不收分,仅供交流,有需要的朋友可以下载! 

本文原创,如需转载请标明出处哦!

 

你可能感兴趣的:(mfc,工具,menu)