阅读背景:

MFC对话框的透明化---续_yishang44的博客

来源:互联网 

一开始以为button的透明化只要在OnCtlColor中进行画图就好了。

HBRUSH CTestDialogProDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	//< TODO:  在此更改 DC 的任何特性
	if(nCtlColor == CTLCOLOR_STATIC )
	{
		pDC->SetBkMode(TRANSPARENT);//<设置背景透明
		return (HBRUSH)::GetStockObject(NULL_BRUSH);
	}

// 	UINT nID = pWnd->GetDlgCtrlID();
	if (pWnd->GetDlgCtrlID() == IDC_BUTTON1)
	{//有问题??
		pDC->SetBkMode(TRANSPARENT);

		CRect rc;
		pWnd->GetWindowRect(&rc);
		ScreenToClient(&rc);
		//pWnd->GetClientRect(&rc);
		//ClientToScreen(&rc);

		CDC* dc = GetDC();

		dc->BitBlt(0,0,rc.Width(),rc.Height(),pDC,rc.left,rc.top,SRCCOPY);  //把父窗口背景图片先画到按钮上//截图,拷贝

		ReleaseDC(dc);

		hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
	}   


	//< TODO:  如果默认的不是所需画笔,则返回另一个画笔

	return hbr;
}HBRUSH 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: