MFC单选按钮背景问题

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值