現在把我最新研究的對CMFCToolBar心得寫在這邊。
現在介紹兩種加載工具欄的方式:
一種是靜态加載工具欄,跟普通的加載工具欄一樣,隻是用了自定義圖檔。
一種是動态加載工具欄,這個也是需要靜态工具的幫忙,這個的話原因還沒有研究,但可以達到動态的效果。
還有特别需要介紹的是增加透明工具欄圖檔的方法。不知道一篇文章寫這麼多好不好。就算是分享學習了。
1、增加透明工具欄按鈕圖檔。
1)擷取一張需要插入工具欄的位圖bmp;
2)用Adobe Photoshop CS3進行打開(就是圖像處理工具,一般都可以)。
3)點選箭頭,然後全選圖檔。

4)全選圖檔,進行拷貝。
5)輕按兩下右下角通道。
6)點選建立通道
7)黏貼剛剛複制的圖檔
8)區域選擇,用魔棒把圖示的外圍選中,并填充外圍顔色為黑色。
9)點選菜單中選擇,點選反向,然後剪切。
10)另存圖檔。透明圖示就做好了。
11)示範圖示
這樣就不會出現白色底了,透明圖示。這圖檔大小會比普通圖檔大,因為加了通道。
2)CMFCToolBar 加載靜态工具欄
1)、設定工具欄按鈕數和按鈕大小,以上圖檔是32像素,即寬度和高度設定成32*32
2)、聲明成員變量
CMFCToolBar m_toolBar;
3)、加載代碼
//加載真彩圖檔工具欄 方式1.
m_toolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
m_toolBar.LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE, 0, 0, IDB_TOOL_FIRST_BMP);
m_toolBar.SetRouteCommandsViaFrame(FALSE);//設定消息以對話框方式傳遞
//根據對話框大小調整工具欄 包含無菜機關置
CRect rect;
GetClientRect(rect);
if (m_toolBar.GetSafeHwnd() != NULL)
{
int cyTlb = m_toolBar.CalcFixedLayout(FALSE, TRUE).cy;
m_toolBar.SetWindowPos(NULL, rect.left, rect.top+2, rect.Width(),
cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
}
//m_toolBar.AdjustSizeImmediate();//根據按鈕大小調整工具欄
4)、成果如上圖所示。
2、CMFCToolBar 動态工具欄
這個設定可變按鈕個數工具欄
也要用到靜态設定的工具欄長度大小。
1)、設定工具欄按鈕大小和工具欄按鈕個數,按鈕個數為最大工具欄按鈕個數。每個按鈕id為自定義,因為這個工具資源可重複利用
動态設定按鈕的ID跟這靜态設定按鈕的ID無關,後面會根據動态ID進行消息發放。可以設定一個按鈕,用于管理工具欄資源。
3)、聲明成員變量
CMFCToolBar m_toolBar;
4)、加載代碼
m_toolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
m_toolBar.AddToolBarForImageCollection(IDR_EXT_MY_TOOLBAR, IDB_EXIT_BMP);
m_toolBar.SetSizes(CSize(32,32), CSize(32,32));//設定按鈕大小
m_mfcToolbarImage.SetImageSize(CSize(32, 32), TRUE);
CBitmap bmp;
bmp.LoadBitmap(IDB_EXIT_BMP);
m_mfcToolbarImage.AddImage(bmp);
bmp.DeleteObject();
bmp.LoadBitmap(IDB_EDIT_ADD_BMP);
m_mfcToolbarImage.AddImage(bmp);
int aa = m_toolBar.SetUserImages(&m_mfcToolbarImage);
//m_toolBar.image
m_toolBar.InsertButton(CMFCToolBarButton(ID_FILE_NEW , 0, "這是提示?", TRUE, 0));// 在這裡CMFCToolBarButton()第四個參數需要設定為true,這樣在重繪的時候才會,調用自己設定的圖像。
m_toolBar.InsertButton(CMFCToolBarButton(ID_FILE_OPEN , 1, "這是提示1?", TRUE, 0));
m_toolBar.AdjustSizeImmediate();//根據按鈕大小調整工具欄
5)效果圖
大概寫完了,以後會更新的。