Код: Выделить всё
HBRUSH CCDialogExExDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (m_brBkgr.GetSafeHandle() != NULL || m_hBkgrBitmap != NULL)
{
#define AFX_MAX_CLASS_NAME 255
#define AFX_BUTTON_CLASS _T("Button")
if (nCtlColor == CTLCOLOR_STATIC)
{
TCHAR lpszClassName[AFX_MAX_CLASS_NAME + 1];
int nChars = ::GetClassName(pWnd->GetSafeHwnd(), lpszClassName, AFX_MAX_CLASS_NAME);
if(( nChars > 0 ) && ( _tcsncmp( lpszClassName, AFX_BUTTON_CLASS, nChars ) == 0))
{
UINT uStyle=((CButton*)pWnd)->GetButtonStyle();
if (uStyle==BS_AUTOCHECKBOX)
{
CBitmap bmpBk;
CDC * pParentDC = GetDC();//Получаем контекст владельца контрола
CDC dcBk;
m_brBkImage.DeleteObject();// уничтожаем предыдущее
CRect rClient; // клиентская область контрола
CRect rWnd;// окно контрола
pWnd->GetClientRect(& rClient);
pWnd->GetWindowRect(& rWnd);
ScreenToClient(& rWnd);// перевод в клиентские координаты родителя
dcBk.CreateCompatibleDC(pDC);
bmpBk.CreateCompatibleBitmap(pDC, rClient.Width(), rClient.Height());
CBitmap * pOldBitmap=dcBk.SelectObject(& bmpBk);
dcBk.BitBlt(0, 0, rClient.Width(), rClient.Height(), pParentDC, rWnd.left, rWnd.top, SRCCOPY);
m_brBkImage.CreatePatternBrush(&bmpBk);// получаем кисть для контрола
dcBk.SelectObject(pOldBitmap);//pOldBrush
ReleaseDC(pParentDC); // освобождаем контекст
//pDC->SetBkMode(TRANSPARENT);
hbr =(HBRUSH)m_brBkImage;
ReleaseDC(&dcBk);
//return (HBRUSH)m_brBkgr;
}
}
}
}
return hbr;
}