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;
}
}
对话框背景真正起作用的做法。(有内存泄露,不过可以通过各个控件的CtrlColor方法实现)
最新推荐文章于 2024-02-19 16:49:39 发布