一开始以为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;
}
结果发现没啥用。