MFC 使用位圖按鈕,而且設置按鈕的鼠標懸停效果

系統環境:Windows 10
軟件環境:Visual C++ 2013 SP1
本次目的:使用位圖按鈕,而且設置按鈕的鼠標懸停效果函數

      在用MFC開發時,界面是比較很差開發的一塊。VC中自帶了CBitmapButton類,可是用途很少,網上不少Button類的派生類蠻實用的,可是如果簡單的位圖按鈕用自帶的CBitmapButton就能夠實現了,如下是效果圖:spa

步驟一:新建基於對話框工程,放置一個按鈕,能夠適當調整大小,設置其Owner Draw屬性爲TRUE,右鍵爲按鈕添加變量,改變其變量類型爲CBitmapButton,按肯定完成;設計

步驟二:導入按鈕位圖,這裏四幅圖大小要一致,如下是四種狀體的按鈕,若讀者要實驗此次的設計的話,能夠右鍵另存爲,而後用「畫圖」把png格式的另存爲bmp格式的。在資源視圖,右鍵「添加資源」,「導入」如下圖片:code

步驟三:初始化工做,在對話框的OnInitDialog()函數裏面添加如下代碼:blog

 

m_btButton.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4);   //載入  
m_btButton.SizeToContent();  //使按鈕適應圖片大小  

 

 

步驟四:爲控制位圖按鈕的可用、不可用添加代碼,這是爲了驗證第四種狀態的按鈕:事件

 

void CTestDlg::OnBnClickedButton2()  
{     
    m_btButton.EnableWindow(0);  
}  
void CTestDlg::OnBnClickedButton3()  
{     
    m_btButton.EnableWindow();  
}  

 

 

步驟五:到這裏已經完成了位圖按鈕的實現,編譯運行能夠看到結果。可是鼠標滑過的時候,按鈕並不會感應到焦點的存在。這裏用定時器捕獲焦點在按鈕上,而且改變此時的按鈕狀體爲第三種圖片。首先爲窗體添加OnTimer()事件,在OnTimer()函數裏面填寫以下代碼:圖片

 

 
void CTestDlg::OnTimer(UINT_PTR nIDEvent)  
{  
    // TODO: 在此添加消息處理程序代碼和/或調用默認值  
    if (1==nIDEvent)  
     {  
      POINT p;  
      GetCursorPos(&p);     
      CWnd *hwnd;  
      hwnd=WindowFromPoint(p);        //檢索窗口中包含指定的點;點必須指定屏幕座標在屏幕上的一個點。     
      CWnd *hwnd2=GetDlgItem(IDC_BUTTON1);  
      if (hwnd2 == hwnd)         //若是鼠標在按鈕上  
      {  
       if (GetFocus()!=hwnd2)        //若是按鈕無焦點,那麼設置焦點  
        hwnd2->SetFocus() ;  
      }  
      else          //若是鼠標不在按鈕上;  
      {  
       if (GetFocus() == hwnd2 )                  //若是按鈕有焦點,那麼去焦點;  
        GetDlgItem(IDC_BUTTON2)->SetFocus();      //這裏的IDC_BUTTON2爲你想跳轉到的控件ID號  
      }     
     }  
    CDialog::OnTimer(nIDEvent);  
}  

 

 

最後在對話框的OnInitDialog()函數裏面添加開啓定時器,時間間隔200ms足夠了。資源

SetTimer(1,200,NULL);  

 

完成後,運行就可實現與文章開頭所示的圖片同樣的效果。開發

相關文章
相關標籤/搜索