VC實現工具欄的下拉箭頭按鈕

2021-04-20 15:31:26 字數 1599 閱讀 1043

效果圖:

本文將告訴你如何實現,方法其實很簡單:

1、新建乙個mfc/sdi工程,一路都取預設的設定。

2、在mainframe.cpp檔案中找到 cmainframe::oncreate()框架視窗建立函式。在末尾新增如下**行:

dword dwexstyle = tbstyle_ex_drawddarrows;

m_wnd*******.get*******ctrl().sendmessage(tb_setextendedstyle, 0, (lparam)dwexstyle);

這兩行**的作用是讓工具欄具有處理下拉箭頭的能力,接著要用setbuttonstyle()方法在選定的地方新增下拉箭頭按鈕,在例子程式裡,下拉箭頭按鈕是加在了檔案開啟選單上:

dword dwstyle ;

dwstyle  = tbstyle_dropdown;

m_wnd*******.setbuttonstyle(m_wnd*******.commandtoindex(id_file_open), dwstyle);

加了上述**行之後,編譯一次程式,然後執行程式,你就可以看到下拉箭頭了。但此時還不能操作。

3、接下來要做的事情是新增下拉箭頭的訊息處理**以及程式要用的選單資源。現在假設你已經建立了選單資源,且假設這個選單的資源id是idr_menu1。如圖二所示。

在cmainframe類的訊息對映中加入下拉箭頭的tbn_dropdown訊息對映: begin_message_map(cmainframe, cmdiframewnd)

//}afx_msg_map

end_message_map()

4、在mainframe.h標頭檔案中加入訊息處理函式的宣告: //}afx_msg

5、在mainframe.cpp檔案中加入tbn_dropdown訊息處理的實現**:

void cmainframe::on*******dropdown(nmhdr* pnmhr, lresult *plr)

// 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);

} void cmyview::ongotovckbasehomepage()

它開啟預設的瀏覽器並訪問vc知識庫主頁。

好了,現在編譯並執行程式吧。下面是例子程式執行畫面(圖三):

注意本文提供源**僅僅只是個例子程式,在現實的軟體設計和程式設計行為中,沒有誰會在「開啟檔案」功能選單裡加入什麼「開啟關於對話方塊」和「vc知識庫主頁」之類的選單命令。這有悖於windows程式的ui規則。

MFC工具欄按鈕下拉

1.首先在cmainframe oncreate 函式下新增如下 讓工具欄有下拉能力和向下的箭頭按鈕 讓工具欄具有處理下拉箭頭的能力 dword dwexstyle tbstyle ex drawddarrows m wnd get ctrl sendmessage tb setextendedst...

VC 為工具欄新增按鈕

假設工具欄有兩個按鈕,為每個按鈕新增圖示和文字 1.新建乙個單文件程式,將準備好的圖示資源 32 32 複製到res資料夾.2.在資源中開啟工具欄編輯器,刪除 del 原有的點陣圖和多餘的按鈕 將按鈕拖出工具欄即可刪除 並為每個按鈕修改id 雙擊 比如id btn1 id btn2,可在prompt...

VC中實現多行工具欄

vc中實現工具欄是件輕而易舉的事,然而要實現多行工具欄卻需要一定的程式設計,本文簡要介紹實現乙個簡單的多行工具欄 的具體方法。先建立乙個基於文件的mfc應用程式,然後在cmainframe類中新增乙個c 物件,本文中以通常的繪圖工具欄為列,將該物件命名為m wnddrawingbar。然後在資源檔案...