1.bmp基本概念
(1)色位
色位即色彩位數,指每個像素點上顏色的數據位數(bit),有色彩深度、色彩精度等等多種稱法,以24位為例,表示R.G.B每原色用8位二進制數據表示,最多可表達256級濃淡,從而可以再現256x256x256=16777216種顏色。色彩數越多,圖像就越生動艷麗。
(2)圖片大小
位圖圖片大小和像素有關。像素:圖片上的1個點就是1個像素。
(3)分辨率
分辨率通常是指1英寸長度上的像素(點)數,表示一張圖片上像素之間排列的疏密程度。
2.MFC工具欄控件
創建工具欄步驟:
(1)在Resource View中插入新toolbar
(2)在toolbar上雙擊增加按鈕,更改ID為ID_BUTTON,編譯后在resource.h中即可看到
#define ID_BUTTON1 32771
(3)在框架類中添加保護的成員變量 CToolBar m_MyToolBar;
(4)在框架類的OnCreate中用CreateEx創建工具欄控件(設置屬性),加載工具欄資源
代碼如下:
if (!m_MyToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_MyToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_MyToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_MyToolBar);
(5)為工具欄按鈕添加消息響應函數,否則按鈕為灰色
在框架類Add Window Message Handle, 選擇ID_BUTTON,添加消息響應。
具體添加的代碼為:1.框架類的聲明中afx_msg void OnButton1();
2.框架類的源文件中ON_COMMAND(ID_BUTTON1, OnButton1)
3.框架類的源文件中消息響應函數的實現void CMainFrame::OnButton1() {}
效果圖如下:
3.bmp工具欄(開始步驟同上略去)
(1)在Resource View中添加bitmap (在此之前先用畫圖工具將bitmap調整至合適大小,如48*48),同樣編譯后可在
resource.h中觀察到#define IDB_BITMAP1 132
(2)在框架類中添加成員變量CImageList m_imagelist;
(3)初始化imagelist並將它與CImageList對象聯系起來
m_imagelist.Create(48,48,ILC_COLOR32|ILC_MASK,0,0);
ILC_MASK的作用是將背景色透明。
(4)加載位圖資源並且添加進圖像列表imagelist(注意要用deleteObject釋放之前加載的資源)
CBitmap bmp;
for(int i=0;i<3;++i)
{
bmp.LoadBitmap(IDB_BITMAP1+i);
m_imagelist.Add(&bmp,RGB(255,255,255));
bmp.DeleteObject();
}
(5)構建一個ToolBar 按鈕ID的數組
UINT nArray[3];
for(int k=0;k<3;++i)
{
nArray[k]=ID_BUTTON1+i;
}
(6)設置工具欄按鈕的ID,按鈕與位圖的大小
m_MyToolBar.SetButtons(nArray,3);
m_MyToolBar.SetSizes(CSize(55,55),CSize(48,48));
(7)設置圖像
m_MyToolBar.GetToolBarCtrl().SetImageList(&m_imagelist);
效果圖如下:
4.為工具欄按鈕添加鼠標停留提示信息
(1)在創建工具欄加上一句代碼:m_MyToolBar.EnableToolTips();
(2)在框架類增加一個成員變量 CString str;
(3)在框架類Message Map中加入 ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolBarTips)
(4)在框架類添加函數BOOL OnToolBarTips(UINT id, NMHDR * pTTTStruct, LRESULT * pResult);
包括頭文件中的函數聲明和源文件的函數實現。該響應函數的實現如下
BOOL CMainFrame::OnToolBarTips( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom;
UINT nIndex=m_MyToolBar.CommandToIndex(nID);
switch(nIndex)
{
case 0:
str.Format("連接儀器");
break;
case 1:
str.Format("新建任務");
break;
default:
break;
}
pTTT->lpszText=str.GetBuffer(str.GetLength());
pTTT->hinst=AfxGetResourceHandle();
return TRUE;
}
效果圖如下:
5. 單擊工具欄按鈕后改變圖片
采用了笨辦法,設置了兩個imagelist.
效果圖如下: