我想让我的对话框与树控件和附加到它的列表框一样透明。我经历了很多样本,我能够做到。
对话框和树控件透明:
BOOL CMyDlg::OnEraseBkgnd(CDC *pDC)
{
pDC->SetBkMode(TRANSPARENT);
return FALSE ;
}
BOOL CMyTreeCtrl::OnEraseBkgnd(CDC *pDC)
{
pDC->SetBkMode(TRANSPARENT);
return TRUE ;
}
对话框的其余控件通过以下方式透明:
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor);
if( pWnd->GetDlgCtrlID() == 1028 || pWnd->GetDlgCtrlID() == 1036)
{
hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
}
return hbr;
}
我在这里面临的问题是,我的对话框连接到一个停靠窗格,当我用鼠标在屏幕上从其固定位置拖动它时,它会失去这种透明度。
此外,当我向右拖动以增加水平尺寸时,它不会正确更新对话框。如果我使用OnPaint()
它,它会更新和停靠相同的颜色设置,但不能应用透明度。
我还尝试在 VS2010 中创建示例 mfc 项目并使用:
LONG ExtendedStyle = GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE );
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,ExtendedStyle | WS_EX_LAYERED );
::SetLayeredWindowAttributes(GetSafeHwnd(),RGB(255,255,0),255,LWA_COLORKEY );
如果我在这里误解了什么,请指导我。我想我已经使用了所有组合的方式。但是没有其他选择可以一次性完成。