久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

如何實(shí)現(xiàn)工具欄的下拉箭頭按鈕-圖文教程-中國(guó)教程網(wǎng)

 oooolbl 2011-01-11
論壇中有人曾經(jīng)問(wèn)過(guò)這樣的問(wèn)題:如何在C++/MFC程序中實(shí)現(xiàn)類似IE工具欄中帶下拉箭頭的按鈕,,如圖一所示:


圖一 IE工具欄中帶下拉箭頭的按鈕

本文將告訴你如何實(shí)現(xiàn),方法其實(shí)很簡(jiǎn)單:
1,、新建一個(gè)MFC/SDI工程,,一路都取默認(rèn)的設(shè)置。
2,、在mainframe.cpp文件中找到 CMainFrame::OnCreate()框架窗口創(chuàng)建函數(shù),。在末尾添加如下代碼行:
      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í)還不能操作,。

3,、接下來(lái)要做的事情是添加下拉箭頭的消息處理代碼以及程序要用的菜單資源。現(xiàn)在假設(shè)你已經(jīng)創(chuàng)建了菜單資源,,且假設(shè)這個(gè)菜單的資源ID是IDR_MENU1,。如圖二所示,。


                              圖二 新創(chuàng)建的菜單資源IDR_MENU1

在CMainFrame類的消息映射中加入下拉箭頭的TBN_DROPDOWN消息映射:
      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_MSG     
5,、在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í)庫(kù)主頁(yè)”,。它們對(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)在例子程序中是通過(guò)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.",NULL,NULL,SW_SHOWNORMAL);      }     
它打開默認(rèn)的瀏覽器并訪問(wèn)VC知識(shí)庫(kù)主頁(yè),。

好了,現(xiàn)在編譯并運(yùn)行程序吧,。下面是例子程序運(yùn)行畫面(圖三):<

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多