VC++6裡面使用CBitmapButton類實現圖形按鈕

來源:互聯網
上載者:User

使用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);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.