論壇中有人曾經問過這樣的問題:如何在C++/MFC程序中實現類似IE工具欄中帶下拉箭頭的按鈕,如圖一所示:
圖一 IE工具欄中帶下拉箭頭的按鈕
本文將告訴你如何實現,方法其實很簡單:
1、新建一個MFC/SDI工程,一路都取默認的設置。
2、在mainframe.cpp文件中找到 CMainFrame::OnCreate()框架窗口創建函數。在末尾添加如下代碼行:
DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS; m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);這兩行代碼的作用是讓工具欄具有處理下拉箭頭的能力,接著要用SetButtonStyle()方法在選定的地方添加下拉箭頭按鈕,在例子程序裡,下拉箭頭按鈕是加在了文件打開菜單上:
DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN)); dwStyle |= TBSTYLE_DROPDOWN; m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);加了上述代碼行之後,編譯一次程序,然後運行程序,你就可以看到下拉箭頭了。但此時還不能操作。
3、接下來要做的事情是添加下拉箭頭的消息處理代碼以及程序要用的菜單資源。現在假設你已經創建了菜單資源,且假設這個菜單的資源ID是IDR_MENU1。如圖二所示。
圖二 新創建的菜單資源IDR_MENU1
在CMainFrame類的消息映射中加入下拉箭頭的TBN_DROPDOWN消息映射:
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ... ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown) /