天天看點

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

現在把我最新研究的對CMFCToolBar心得寫在這邊。

現在介紹兩種加載工具欄的方式:

一種是靜态加載工具欄,跟普通的加載工具欄一樣,隻是用了自定義圖檔。

一種是動态加載工具欄,這個也是需要靜态工具的幫忙,這個的話原因還沒有研究,但可以達到動态的效果。

還有特别需要介紹的是增加透明工具欄圖檔的方法。不知道一篇文章寫這麼多好不好。就算是分享學習了。

1、增加透明工具欄按鈕圖檔。

1)擷取一張需要插入工具欄的位圖bmp;

2)用Adobe Photoshop CS3進行打開(就是圖像處理工具,一般都可以)。

3)點選箭頭,然後全選圖檔。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)
MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

4)全選圖檔,進行拷貝。

5)輕按兩下右下角通道。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

6)點選建立通道

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

7)黏貼剛剛複制的圖檔

8)區域選擇,用魔棒把圖示的外圍選中,并填充外圍顔色為黑色。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

9)點選菜單中選擇,點選反向,然後剪切。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

10)另存圖檔。透明圖示就做好了。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

11)示範圖示

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

這樣就不會出現白色底了,透明圖示。這圖檔大小會比普通圖檔大,因為加了通道。

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進行消息發放。可以設定一個按鈕,用于管理工具欄資源。

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

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)效果圖

MFC CMFCToolBar靜态工具欄和動态工具欄,加載自定義圖檔(真彩透明)

大概寫完了,以後會更新的。