Posted on 2006-12-07 16:02
壯士日志 閱讀(466)
評論(0) 編輯 收藏 所屬分類:
編程技術(shù)
vc的對話框中,如果直接用picturebox作為對話框的背景,則其他控件會被擋住。經(jīng)過高手指點,重載了WM_ERASEBKGND消息處理函數(shù),很少的解決了這個問題。而且按照這個思路,可以很方便的為dialog增加動態(tài)的skin:
聲明消息處理函數(shù):
?// Generated message map functions
?//{{AFX_MSG(Input)
?afx_msg BOOL OnEraseBkgnd(CDC* pDC);
?afx_msg void OnButtonOk();
?afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
?afx_msg void OnPaint();
?//}}AFX_MSG
?DECLARE_MESSAGE_MAP()
聲明消息循環(huán):
BEGIN_MESSAGE_MAP(Input, CDialog)
?//{{AFX_MSG_MAP(Input)
?ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
?ON_WM_LBUTTONDBLCLK()
?ON_WM_PAINT()
?ON_WM_ERASEBKGND()
?//}}AFX_MSG_MAP
END_MESSAGE_MAP()
實現(xiàn):
BOOL Input::OnEraseBkgnd(CDC* pDC)
{
?if(m_hBmp)
?{
??BITMAP bm;
??GetObject(m_hBmp,sizeof(bm),&bm);
??HDC hMemdc=CreateCompatibleDC(pDC->m_hDC);
??if(hMemdc)
??{
???? HBITMAP hOldBmp=(HBITMAP)SelectObject(hMemdc,m_hBmp);
???? if(hOldBmp)
???? {
????? BitBlt(pDC->m_hDC,0,0,bm.bmWidth,bm.bmHeight,hMemdc,0,0,SRCCOPY);
????? SelectObject(hMemdc,hOldBmp);
????? DeleteDC(hMemdc);
????? DeleteObject(hOldBmp);
????? return TRUE;
???? }
???? else
??? DeleteDC(hMemdc);
??}
?}
?return CDialog::OnEraseBkgnd(pDC);
}