http://bbs.csdn.net/topics/390631230?list=lz
问题解决了,我从对话框背景贴图中得到灵感,将单选按钮的背景也贴图即可,
注意单选按钮的背景图来自对话框的背景图,即单选按钮背景所在对话框那部分的背景。
具体请看代码,为此我用VS2010做了个例子,
该例子下载地址:http://download.csdn.net/detail/friendan/6497475
效果截图如下:
//对话框背景贴图
BOOL CRadioBkDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDC memDC;
memDC.CreateCompatibleDC(pDC);
BITMAP bmp;
CBitmap bkImg;
bkImg.LoadBitmap(IDB_BMP_DLG_BK);
bkImg.GetBitmap(&bmp);
memDC.SelectObject(&bkImg);
SetWindowPos(NULL, 0, 0, bmp.bmWidth, bmp.bmHeight, SWP_NOMOVE|SWP_NOZORDER);
CRect rect;
GetClientRect(&rect);
pDC->StretchBlt(0, 0, rect.Width(), rect.Height(),
&memDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
memDC.DeleteDC();
CenterWindow();
return TRUE;
return CDialogEx::OnEraseBkgnd(pDC);
}
HBRUSH CRadioBkDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if (IDC_RDO_TEST==pWnd->GetDlgCtrlID())//单选按钮
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
BITMAP bmp;
CBitmap bkImg;
bkImg.LoadBitmap(IDB_BMP_DLG_BK);
bkImg.GetBitmap(&bmp);
memDC.SelectObject(&bkImg);
CRect rcRdo;
pWnd->GetWindowRect(&rcRdo);
ScreenToClient(&rcRdo);
pDC->BitBlt(0,0,rcRdo.Width(),rcRdo.Height(),
&memDC,rcRdo.left,rcRdo.top,SRCCOPY);
memDC.DeleteDC();
return (HBRUSH)::GetStockObject(NULL_BRUSH);//透明画刷
}
if (CTLCOLOR_STATIC==nCtlColor)//静态文字控件
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,0,0));
//return ::CreateSolidBrush(RGB(255,0,0));
return (HBRUSH)::GetStockObject(NULL_BRUSH);//透明画刷
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}