如何在mfc cpp中使用树视图控件创建透明的CDialog

时间:2013-11-22 06:32:24

标签: c++ mfc cdialog

我想让我的对话框与树控件一起透明,并且附加到它的列表框是透明的。我经历了很多样本​​,我能够做到。

对话框和树控件透明:

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

如果我在这里误解了什么,请指导我。我想我已经使用了所有方法。但没有别的选择可以一次性完成这项任务。

0 个答案:

没有答案