PNG透明背景按鈕的實現

問題描述:

當前要在對話框上添加一個以兩個PNG圖片作爲背景的按鈕,PNG圖的背景是透明的,按鈕也要做出相同的透明效果。並且鼠標不在按鈕上時,按鈕顯示"bg1.png";鼠標移動到按鈕上時,按鈕顯示"bg2.png"

開發環境爲VS2010。

解決辦法:

使用GDI+庫裝載PNG圖片,並使用MFC Button Control和CMFCButton類結合,調用CMFCButton::SetImage完成按鈕背景圖片設置。


@1.引入GDI+庫

由於是按鈕上使用的是PNG圖,第一步是將PNG圖裝載進來,這一步建議使用GDI+庫,關於GDI+庫的引入,請參看http://blog.csdn.net/cashey1991/article/details/7407425,其中有詳盡描述)

@2.對話框中添加Bitmap成員變量作爲按鈕背景圖的圖片對象,假設變量名爲m_Bg1, m_Bg2

@4.在構造函數中添加m_Bg1, m_Bg2的初始化代碼

  1. CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)  
  2.     : CDialogEx(CMainDlg::IDD, pParent),  
  3.     m_Bg1(L"bg1.png"), mBg2(L"bg2.png")  
  4. {  
  5.     ....  
  6. }  

@3.在工具箱中選擇MFC Button Control,在對話框中進行添加,假設ID號爲IDC_BTN_PNGBUTTON

@4.設置添加的MFC Button Control的Style爲無邊框,Visible爲True,Transparent爲True,Image Type爲無

@5.在對話框的OnInitDialog()函數中添加代碼:

  1. BOOL CMainDlg::OnInitDialog()  
  2. {  
  3.     CDialogEx::OnInitDialog();  
  4.     ....  
  5.   
  6.     CMFCButton *pMfcButton = (CMFCButton *)GetDlgItem(IDC_BTN_PNGBUTTON);  
  7.   
  8.     HBITMAP hBmp, hBmpHot;  
  9.     m_Bg1.GetHBITMAP(NULL, &hBmp);  
  10.     m_Bg2.GetHBITMAP(NULL, &hBmpHot);  
  11.     pMfcButton->SetImage(hBmp, TRUE, hBmpHot);  
  12.     pMfcButton->m_bTransparent = TRUE;    // 設置按鈕爲透明的  
發佈了82 篇原創文章 · 獲贊 22 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章