MFC選單欄及工具欄實現

2021-08-18 18:23:07 字數 3036 閱讀 5313

mfc選單欄實現:

在資源檢視中,右鍵工程名.rc-->新增資源,選擇menu。對menu設定id,並對menu選單進行設定(即新增選單欄的名字)

在c***dlg.h中,新增cmenu m_menu;

在c***dlg.c的初始化中,新增m_menu.loadmenu(idr_menu1);  //  idr_menu1

setmenu(&m_menu);

mfc工具欄實現:

第一種:

下面說一下bmp圖示製作:

1.先製作單張的圖示,bmp格式的16*16的,可以用ps做,通過畫素大小設定尺寸,裡面的鉛筆工具比較好用,對進行拾色alt+滑鼠左鍵,製作完成後儲存成bmp圖即可。

2.然後使用合成軟體,開始用的是tbcreator和mergepic,但後面發現vs載入工具欄圖示後會有一些地方顏色與事先排序的不一致,而且會有錯位,無奈換了visual*******才好了。使用visual*******生成hot圖,然後需要將設定成4位bmp圖。剛開始使用ps裡做的,但感覺不太好用,方法是:載入後,影象-->模式-->索引顏色,然後檔案-->儲存為,選擇bmp圖,然後儲存後悔彈出乙個對話方塊,選擇4位bmp圖即可。另一種方法是用win7自帶的畫圖工具,載入後,進行另存為,選擇16色位圖bmp,bmp4位=16色位圖(2^4=16)。

3.最後將該替換掉原始的*******1.bmp即可。

有乙個問題,使用load*******貌似只能載入4位的bmp圖,無法載入16位的圖,一載入就崩潰,因此這裡載入的idr_*******1是4位bmp圖。

程式方面:

在c***dlg.h中,新增c*******    m_*******;cimagelist m_imagelist;

在c***dlg.c的初始化中

if(!m_*******.createex(this,tbstyle_tooltips|tbstyle_flat, ws_child | ws_visible | cbrs_top

| cbrs_gripper | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic) || !m_*******.load*******(idr_*******1))

m_*******.enabletooltips(true);

m_*******.showwindow(sw_show);

repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0); //調整工具欄的位置

第二種方法:

在資源檢視中,右鍵工程名.rc-->新增資源,選擇*******。同時新建乙個bitmap,然後將要顯示的進行載入,單個的圖示位圖大小為16*16。

在c***dlg.h中,新增c*******    m_*******;cimagelist m_imagelist;

在c***dlg.c的初始化中

bool cdrawdemodlg::*******_init()

//16位的工具欄按鈕個數決定24位的工具欄按鈕個數,因為那些bmp點陣圖是顯示在工具欄按鈕上的

cimagelist image;

cbitmap bmp;

bmp.loadbitmap(idb_bitmap2); //載入24位bmp工具欄

image.create(16, 16, ilc_mask | ilc_color24, 3, 1); //建立影象列表,ilc_mask表示背景透明,3個工具按鈕,每次增加乙個

image.add(&bmp,rgb(255,255,255)); //把bmp加入到影象列表,背景顏色為白色

m_*******.get*******ctrl().setimagelist(&image);

image.detach(); //用完之後解綁

bmp.detach(); //用完之後解綁

crect rect; //如果顯示不完全,就調整一下大小

m_*******.getitemrect(0, &rect); //獲取第乙個工具按鈕的大小

m_*******.setsizes(rect.size(), csize(16, 16)); //第乙個引數是按鈕大小,第二個是大小

m_*******.enabletooltips(true);

m_*******.showwindow(sw_show);

repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0); //調整工具欄的位置

return true;

}

給工具欄增加提示訊息

on_notify_ex(ttn_needtext,0,ontooltiptext)

在資源檢視的*******中為每個圖示新增prompt。

bool cdrawdemodlg::ontooltiptext(uint, nmhdr* pnmhdr, lresult* presult)

if (nid != 0) //不為分隔符

else

#else

if (pnmhdr->code == ttn_needtexta)

else

#endif

*presult = 0;

// 使工具條提示視窗在最上面

::setwindowpos(pnmhdr->hwndfrom, hwnd_top, 0, 0, 0,0,swp_noactivate|swp_nosize|swp_nomove|swp_noownerzorder);

return true;

} return true;

}

給工具欄的按鈕增加事件處理程式

on_command(idm_test, ontest)//工具欄

void cdrawdemodlg::ontest() 

QT工具欄和選單欄

在qt小知識中了解了向mainwindow中新增選單欄和工具欄,現在學習美化它們 新增圖示。主要是對qt學習之路13的理解。關於qt中 圖示的要求 q 預設是32 32,選單是16 16,如果提供的圖示小於預設要求的尺寸,qt不做操作,qt不會為你放大 如果提供的圖示大於預設要求的尺寸,比如64 6...

MFC框體新增選單欄工具欄狀態列

cmenu封裝了選單控制代碼和相關選單 api 1.1新增資源 1.2在 cmainframe oncreate 函式中新增選單 cmenu attach 將選單控制代碼附加到選單物件中 cmenu detach 將選單控制代碼從選單物件中分離 1.3 命令相關 on command 1.4 選單項...

RCP建立選單欄工具欄(下拉)

如圖 建立並註冊action override protected void makeactions iworkbenchwindow window 建立選單,選單項 override protected void fillmenubar imenumanager menubar override ...