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);加了上述代碼行之后,編譯一次程序,然后運(yùn)行程序,你就可以看到下拉箭頭了。但此時(shí)還不能操作。
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ... ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown) //}}AFX_MSG_MAP END_MESSAGE_MAP()4、在MainFrame.h頭文件中加入消息處理函數(shù)的聲明:
//{{AFX_MSG(CMainFrame) ... afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes); //}}AFX_MSG5、在MainFrame.cpp文件中加入TBN_DROPDOWN消息處理的實(shí)現(xiàn)代碼:
void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr) { CWnd *pWnd; UINT nID; // Switch on button command id''s. switch (pnmtb->iItem) { case ID_FILE_OPEN: pWnd = &m_wndToolBar; nID = IDR_MENU1; break; default: return; } // load and display popup menu CMenu menu; menu.LoadMenu(nID); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup); CRect rc; pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc); pWnd->ClientToScreen(&rc); pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc); }6、前面第三步創(chuàng)建的菜單資源里有三個(gè)菜單命令,“最近打開的文件”、“打開關(guān)于對(duì)話框”、“VC知識(shí)庫主頁”。它們對(duì)應(yīng)的菜單ID為:ID_FILE_MRU_FILE1、ID_APP_ABOUT、ID_VCKBASE_HOME,前兩個(gè)ID都是MFC默認(rèn)的菜單,它們調(diào)用的命令函數(shù)在例子程序中也是MFC自動(dòng)創(chuàng)建和調(diào)用的。ID_VCKBASE_HOME菜單項(xiàng)在例子程序中是通過ClassView關(guān)聯(lián)到視圖類進(jìn)行處理的,用戶選擇這個(gè)菜單項(xiàng)時(shí)調(diào)用OnGotoVckbaseHomePage():
void CMyView::OnGotoVckbaseHomePage() { // TODO: Add your command handler code here ShellExecute(NULL,"open","http://www.vckbase.com",NULL,NULL,SW_SHOWNORMAL); }它打開默認(rèn)的瀏覽器并訪問VC知識(shí)庫主頁。
聯(lián)系客服