其实很简单,就一句话。因为CreateSimpleToolBarCtrl是一个静态函数
HWND hWndToolBar = CFrameWindowImplBase<CWindow,CFrameWinTraits>::CreateSimpleToolBarCtrl(m_hWnd, IDR_TOOLBAR_GENERAL, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE_EX);
样式如下,工具条,可以带下拉菜单
具体步骤:
1.包含文件.h
#include "toolbarhelper.h" //http://www.codeproject.com/Articles/16737/WTL-Toolbar-Helper
//由于要用到一些扩展特性,比如增加按钮文字,增加按钮下拉菜单等等
class CMyToolBarDlg : public CDialogImpl<CMyToolBarDlg>,
public CToolBarHelper<CMyToolBarDlg> //加了toobarhelper.h
{
public:
//其他省略.....
HWND m_hMyToolBar; //菜单条hWnd
//下面三个是由于toolbarhelper需要用到,所以必须添加
CCommandBarCtrl m_CmdBar;
void OnToolBarCombo(HWND hWndCombo, UINT nID, int nSel, LPCTSTR lpszText, DWORD dwItemData); //CToolBarHelper
void PrepareToolBarMenu(UINT nMenuID, HMENU hMenu); //CToolBarHelper
//两个函数可以是空函数,但必须有
BEGIN_MSG_MAP(CMyToolBarDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
CHAIN_MSG_MAP(CToolBarHelper<CMyToolBarDlg>) //链接到toolbarHelper,否则没下拉菜单
END_MSG_MAP()
};
2.cpp文件,主要是OnInitDialog函数
LRESULT CMyToolBarDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
RECT rect;
SIZE size;
//直接调用atlframe.h的静态函数
m_hMyToolBar = CFrameWindowImplBase<CWindow,CFrameWinTraits>::CreateSimpleToolBarCtrl(m_hWnd, IDR_TOOLBAR_GENERAL, TRUE, ATL_SIMPLE_TOOLBAR_PANE_STYLE_EX);
//建立一个空的菜单
m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
//绑定操作菜单条
CToolBarCtrl tBar(m_hMyToolBar);
//先定位,因为CreateSimpleToolBarCtrl把工具条放在一个100x100大小的地方。
tBar.GetButtonSize(size);
GetClientRect(&rect);
rect.bottom=rect.top+size.cy;
tBar.MoveWindow(&rect);
//设置工具条的文字,和下拉菜单,具体参照toolbarhelper文章
AddToolbarButtonText(m_hMyToolBar, ID_IMPORT_IMGS,_T("照片导入"));
AddToolbarButtonText(m_hMyToolBar, ID_BTN_AUTOALIGN,_T("智能排版"));
AddToolbarButtonText(m_hMyToolBar, ID_VIEW_PREV,_T("前翻"));
AddToolbarButtonText(m_hMyToolBar, ID_VIEW_NEXT,_T("后翻"));
AddToolbarButtonText(m_hMyToolBar, ID_VIEW_FULLSCREEN,_T("全屏"));
AddToolbarButtonText(m_hMyToolBar, ID_EDIT_UNDO,_T("撤消"));
AddToolbarButtonText(m_hMyToolBar, ID_EDIT_REDO,_T("重做"));
AddToolbarButtonText(m_hMyToolBar, ID_VIEW_RESETLAYOUT,_T("重置工作区"));
AddToolbarButtonText(m_hMyToolBar, ID_FILE_ADDPAGE,_T("加页"));
AddToolbarButtonText(m_hMyToolBar, ID_FILE_FINISHORDER,_T("完成"));
AddToolbarButtonText(m_hMyToolBar, ID_VIEW_CHANGE_COMBOX,_T("视角"));
AddToolbarButtonText(m_hMyToolBar, ID_FILE_LOGIN,_T("登录"));
AddToolbarButtonText(m_hMyToolBar, ID_BUTTON_TASK,_T("当前任务"));
//添加下拉菜单
AddToolBarDropDownMenu(m_hMyToolBar, ID_IMPORT_IMGS, IDR_VIEWLAYOUTMENU);
CenterWindow(GetParent());
return TRUE;
}
3.下拉菜单以及工具条,均可以在资源编辑器中编辑调整。
4.如果要调整工具条位置、大小等,一定要加上 CCS_NOPARENTALIGN 属性,否则无法调整宽度。CCS_NODIVIDER 则可以去掉顶端的那根横线。
4.以上测试,在VC6/WTL8编译通过
参照:
WTL_TOOLHELPER: http://www.codeproject.com/Articles/16737/WTL-Toolbar-Helper
RT_TOOLBAR 自定义资源格式介绍:http://www.microsoft.com/msj/0198/coolmenu.aspx
工具条资源读取方法: http://blog.csdn.net/wsjeep/article/details/1656246