/-------------------------------
看正文前注意:在vs2008要修改下CTrueColorToolBar中的OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);函数
具体方法参考下面:
今天碰到一个问题
static_cast” : 无法从“void (__thiscall CMainFrame::* )(NMTOOLBARA *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”
因是后生,所以前辈们都已经有了答案,我唯一能做的就是学习和总结。方法:
vc6->vc7 (NMTOOLBAR->NMHDR) void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr) vc7: error C2440: “static_cast” : 无法从“void (__thiscall CMainFrame::* )(NMTOOLBARA *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)” 改成 void CMainFrame::OnToolbarDropDown(NMHDR* pnmhdr, LRESULT *plr) { LPNMTOOLBAR pnmtb = reinterpret_cast<LPNMTOOLBAR>(pnmhdr); ... }
--------------------------------/
正文::
将要达到的效果如图:
1、真彩色按钮
2、按钮旁边加下拉箭头
下面介绍需要用到的类,CTrueColorToolBar,这个类是网上搜集的一个类。将这个类引入到工程中来。具体内容如下:
1、在MainFrm.h加入头文件TrueColorToolBar.h
#include "TrueColorToolbar.h"
2、在MainFrame类中加入成员变量
CTrueColorToolBar m_wndTCToolbar;
3、在资源中插入一个Toolbar,每个按钮的大小要与建立工具条位图时每个按钮的大小一致,个数要一样。ID设为ID_TOOLBAR_TEST。
替换其中的m_wndToolBar为m_wndTCToolbar
将m_wndTCToolbar.LoadToolBar(IDR_MAINFRAME)中的IDR_MAINFRAME换为ID_TOOLBAR_TEST
5、调用CTrueColorToolBar类的成员函数,加载真彩工具条的位图。
m_wndTCToolbar.LoadTrueColorToolBar( 32, IDB_TEST_HOT, IDB_TEST_HOT, IDB_TEST_DISABLED);
第一个参数为按钮的边长,后面依次为normal、hot和disable状态的位图。
6、将按钮关联到菜单,修改按钮ID与菜单上对应项心相同即可。本例中的ID依次设置为ID_FILE_OPEN,ID_FILE_SAVE,ID_TEST_BACK,ID_TEST_STOP,ID_TEST_FORWARD,ID_TEST_HELP,后面四个分别在菜单中建立对应项并加响应函数。如图:
1、在资源中新建一个menu,ID设为IDR_TEST_MENU,这个菜单将是显示在下拉箭头下的那个菜单。如图建立一个:
2、在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中加入下面一句:
m_wndTCToolbar.AddDropDownButton(&m_wndTCToolbar,ID_FILE_OPEN,IDR_TEST_MENU);
好了,大功告成。
结束。。。。。。。。。。