使用VC++6中的CBitmapButton類,可以做出效果非常好的圖形按鈕來。
使用方法也非常簡單:
1.在對話方塊上拖放一個普通的按鈕控制項;
2.聲明一個CBitmapButton類的執行個體;不要使用ClassWizard映射;
3.調用CBitmapButton類執行個體的LoadBitmaps方法,載入四幅位元影像。這四幅位元影像分別對應按鈕
的四種狀態:正常(U)狀態,按下(D)狀態,獲得輸入(F)狀態,禁止(X)狀態。
其中參數:
nIDBitmapResource是位元影像按鈕正常狀態(U)下的位元影像的資源ID。
nIDBitmapResourceSel是位元影像按鈕按下狀態(D)下的位元影像的資源ID。
nIDBitmapResourceFocus是位元影像按鈕獲得輸入狀態(F)下的位元影像的資源ID。
nIDBitmapResourceDisabled是位元影像按鈕禁止狀態(X)下的位元影像的資源ID。
4.使用CBitmapButton::SubclassDlgItem關聯到想要的按鈕。其中第一個參數是要關聯的按
鈕的ID,第二個參數是要關聯的按鈕所在的視窗的指標,一般來說,傳給它this就行了;
5.使用CBitmapButton::SizeToContent函數使按鈕適合圖片大小;
6.在對話方塊編輯器(或稱表單編輯器吧 )中,把關聯的按鈕控制項的Owner draw屬性選
上。
好了,現在運行你的程式,是不是發現按鈕變成圖形按鈕了,而且效果還不錯呢。
不過唯一的遺憾是,現在軟體介面流行那種Hover按鈕,就是滑鼠移到按鈕上時,按鈕圖片
會顯示發亮、上移的效果,滑鼠移出按鈕則按鈕恢複原狀,而CBitmapButton類只有如上面所說的四種片,
不包含滑鼠移到按鈕上時的顯示圖片;我想到了一種辦法:利用 lpszBitmapResourceFocus(位元影像
按鈕獲得焦點時的位元影像),當滑鼠移動到按鈕上的時候,用代碼使按鈕獲得焦點,當滑鼠移
出按鈕時,用代碼使按鈕失去焦點,這樣就間接的實現了HoverButton,效果還不錯;
//實現Hover效果的處理代碼:///////////////////////////////////////////////
//在初始化對話方塊的時候要用SetTimer函數設定一個定時器,200ms足矣;/////////
void CCBitmapButtonDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (1==nIDEvent)
{
POINT p;
GetCursorPos(&p);
CString s;
CWnd *hwnd;
s.Format("%d",hwnd=WindowFromPoint(p));
this->GetDC()->DrawText(s,CRect(10,10,100,100),0);
CWnd *hwnd2=GetDlgItem(IDC_BUTTON1);
if (hwnd2 == hwnd)//如果滑鼠在按鈕上
{
if (GetFocus()!=hwnd2)//如果按鈕無焦點,那麼設定焦點
hwnd2->SetFocus() ;
}
else//如果滑鼠不在按鈕上;
{
if (GetFocus() == hwnd2 )//如果按鈕有焦點,那麼去焦點;
GetDlgItem(IDC_EDIT1)->SetFocus();
}
}
CDialog::OnTimer(nIDEvent);
}