描述:
工具条上有按钮ID_BUTTON_BLACK,ID_BUTTON_BLUE,ID_BUTTON_RED1,ID_BUTTON_YELLOW,ID_BUTTON_RED,ID_BUTTON_GREEN;
//消息映射
BEGIN_MSG_MAP(CBandToolBarCtrl)
MESSAGE_HANDLER(OCM_COMMAND, OnCommand)
OCM_COMMAND_ID_HANDLER(ID_BUTTON_BLACK, OnButtonBlack)
OCM_NOTIFY_CODE_HANDLER(TBN_DROPDOWN, OnToolbarDropDown)
NOTIFY_CODE_HANDLER(TTN_NEEDTEXT, OnToolbarNeedText)
COMMAND_ID_HANDLER(ID_MENUPOPUP_CONFIG, OnConfig)
COMMAND_ID_HANDLER(ID_MENUPOPUP_OPTION2, OnAbout)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_MENUSELECT, OnMenuSelect)
DEFAULT_REFLECTION_HANDLER()
// handle the rebar chevron messages, does not require reflection
ALT_MSG_MAP(1)
COMMAND_ID_HANDLER(ID_BUTTON_BLACK, OnButtonBlack)
NOTIFY_CODE_HANDLER(TBN_DROPDOWN, OnToolbarDropDown)
END_MSG_MAP()
//////////////////////////////////////////
LRESULT CBandToolBarCtrl::OnToolbarDropDown(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled)
{
NMTOOLBAR* ptb = (NMTOOLBAR *) pnmh;
if ((ptb->iItem == ID_BUTTON_BLACK || ptb->iItem == ID_BUTTON_BLUE|| ptb->iItem == ID_BUTTON_RED1
|| ptb->iItem == ID_BUTTON_YELLOW|| ptb->iItem == ID_BUTTON_RED|| ptb->iItem == ID_BUTTON_GREEN))
{
SetFocus();
RECT rc;
CToolBarCtrl tbar(pnmh->hwndFrom);
BOOL b = tbar.GetItemRect(tbar.CommandToIndex(ptb->iItem), &rc);
ATLASSERT(b);
tbar.MapWindowPoints(HWND_DESKTOP, (POINT *)&rc, 2);
CMenu menuPopup;
switch(ptb->iItem)
{
case ID_BUTTON_BLACK :
menuPopup.LoadMenu(IDR_MENU_POPUP);//这是加载的菜单资源
break;
case ID_BUTTON_BLUE :
menuPopup.LoadMenu(IDR_MENU_POPUP_2);//这是加载的菜单资源
break;
case ID_BUTTON_RED1 :
menuPopup.LoadMenu(IDR_MENU_POPUP_3);
break;
case ID_BUTTON_YELLOW :
//当点击这项的时候想用代码成一个下拉菜单
如果生成了下拉菜单,各菜单项怎么来实现消息映射呢???
能不能生成一个展开式的菜单项
break;
case ID_BUTTON_RED :
//当点击这项的时候想用代码成一个下拉菜单
如果生成了下拉菜单,各菜单项怎么来实现消息映射呢???
能不能生成一个展开式的菜单项
break;
case ID_BUTTON_GREEN :
//当点击这项的时候想用代码成一个下拉菜单
如果生成了下拉菜单,各菜单项怎么来实现消息映射呢???
能不能生成一个展开式的菜单项 break;
};
::TrackPopupMenu(menuPopup.GetSubMenu(0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, rc.left, rc.bottom , 0, *this,
NULL);
bHandled = true;
return 0;
}
bHandled = false;
return 0;
}