关于透明dialog的问题
请教如何设置dialog透明,但是在onpaint里面画的图不透明?
现在只会设置dialog透明,但是画的图也一起透明了。
[解决办法]
给一个例子:
void CTransDlgDlg::RgnSubtractCtrls(CRgn &rgn,int offX,int offY)
{
CWnd *pWnd=0;
int ID[]={IDOK,IDC_BUTTON1,IDCANCEL};
for(int jj=0;jj<sizeof(ID)/sizeof(int);jj++)
{
pWnd=GetDlgItem(ID[jj]);
CRect rc;
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);
rc.OffsetRect(offX,offY);
CRgn ctlRgn;
ctlRgn.CreateRectRgnIndirect(&rc);
rgn.CombineRgn(&rgn,&ctlRgn,RGN_XOR);
ctlRgn.DeleteObject();
}
}
void CTransDlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
static BOOL sw=FALSE;
if(!sw)
{
sw=TRUE;
CRect rcWin;
GetWindowRect(&rcWin);
CRect rcClt;
GetClientRect(&rcClt);
ClientToScreen(&rcClt);
//
rcClt.OffsetRect(-rcWin.left,-rcWin.top);
int offX=rcClt.left;
int offY=rcClt.top;
rcWin.OffsetRect(-rcWin.left,-rcWin.top);
//
CRgn tmp;
tmp.CreateRectRgnIndirect(&rcClt);
//
RgnSubtractCtrls(tmp,offX,offY);
//
CRgn rgn;
rgn.CreateRectRgnIndirect(&rcWin);
rgn.CombineRgn(&rgn, &tmp, RGN_DIFF);
SetWindowRgn(rgn,TRUE);
tmp.DeleteObject();
rgn.DeleteObject();
m_Trans.SetWindowText("不透明");
}
else
{
sw=FALSE;
SetWindowRgn(0,TRUE);
m_Trans.SetWindowText("透明");
}
}
BOOL CTransDlgDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc,RGB(255,200,200));
return TRUE;
//return CDialog::OnEraseBkgnd(pDC);
}