对话框背景真正起作用的做法。(有内存泄露,不过可以通过各个控件的CtrlColor方法实现)

xiaoxiao2021-02-28  60

HBRUSH CTestBKGroundDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {     if (nCtlColor == CTLCOLOR_DLG)     {         HBITMAP hbm = (HBITMAP)LoadImage(AfxGetApp()->m_hInstance, _T("MyBitMap.bmp"),             IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);         hbr = CreatePatternBrush(hbm);         DeleteObject(hbm);         return hbr;     }     else     {         CRect rect;         pWnd->GetClientRect(&rect);         pWnd->ClientToScreen(&rect);         ScreenToClient(&rect);         HBRUSH hbr = NULL;         HBITMAP hbm = (HBITMAP)LoadImage(AfxGetApp()->m_hInstance, _T("MyBitMap.bmp"),             IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);         CDC dc;         dc.CreateCompatibleDC(pDC);         dc.SelectObject(hbm);         CDC dc2;         dc2.CreateCompatibleDC(&dc);         CBitmap bitmap;         bitmap.CreateCompatibleBitmap(&dc, rect.Width() + 20,rect.Height() +20);         dc2.SelectObject(bitmap);         dc2.BitBlt(0,0,rect.Width() + 20,rect.Height() +20,&dc, rect.left,rect.top,SRCCOPY);         hbr = CreatePatternBrush((HBITMAP)(bitmap.m_hObject));         pDC->SetBkMode(TRANSPARENT);         DeleteObject(hbm);         bitmap.DeleteObject();         dc2.DeleteDC();         dc.DeleteDC();;         return hbr;     } }

转载请注明原文地址: https://www.6miu.com/read-73477.html

最新回复(0)