問題描述:
當前要在對話框上添加一個以兩個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的初始化代碼
- CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
- : CDialogEx(CMainDlg::IDD, pParent),
- m_Bg1(L"bg1.png"), mBg2(L"bg2.png")
- {
- ....
- }
@3.在工具箱中選擇MFC Button Control,在對話框中進行添加,假設ID號爲IDC_BTN_PNGBUTTON
@4.設置添加的MFC Button Control的Style爲無邊框,Visible爲True,Transparent爲True,Image Type爲無
@5.在對話框的OnInitDialog()函數中添加代碼:
- BOOL CMainDlg::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- ....
- CMFCButton *pMfcButton = (CMFCButton *)GetDlgItem(IDC_BTN_PNGBUTTON);
- HBITMAP hBmp, hBmpHot;
- m_Bg1.GetHBITMAP(NULL, &hBmp);
- m_Bg2.GetHBITMAP(NULL, &hBmpHot);
- pMfcButton->SetImage(hBmp, TRUE, hBmpHot);
- pMfcButton->m_bTransparent = TRUE; // 設置按鈕爲透明的