对话框加上属性“Clip children”

解决方案 »

  1.   

    对话框的属性 下的  style页面 勾上 Clip   children 项
      

  2.   

    在OnEraseBkgnd里为何要执行 ReleaseDC(pDC)?
      

  3.   

    对了,还有,能不能把静态文本框设置为对用DC绘制的背景图片透明呢?用了pDC-> SetBkMode(TRANSPARENT)后文字背景与静态框颜色统一了,怎么样使整个静态框针对对话框背景图片透明?
      

  4.   

    对了,还有,能不能把静态文本框设置为对用DC绘制的背景图片透明呢?用了pDC-> SetBkMode(TRANSPARENT)后文字背景与静态框颜色统一了,怎么样使整个静态框针对对话框背景图片透明?
      

  5.   

    加了Clip   children,果然控件能显示了!不过在Group-box控件之内就看不见背景图片了,而是残留了原来屏幕的内容,原来没有clip children风格是可以显示背景图的!而且从屏幕范围外拉回来后造成Group-box里面的控件“拖尾”,一片模糊!
      

  6.   

    to jameshooo : ReleaseDC(pDC)注掉了,为什么之前也没出现错误呢?
      

  7.   

    1.你的绘图可能有问题。
    2.如果是纯色也很好办(哪怕每个控件不一样),用图片比较麻烦,Clip children可以不要,但要在对话框重绘时调用控件重绘。
    3.自绘控件类可能要好些。
    4.用其它第三方的皮肤类或库。
    http://www.codeproject.com/combobox/TransListBox.asp
    http://www.codeproject.com/gdi/brush_skin.asp
      

  8.   

    最简单的方法,一定可行,按住ctrl+D, 把背景图片序号选择1就可以看见其他控件了
      

  9.   

    谢谢各位!shunruo提供的透明列表框类我用了,它的原理应该是截取控件区域原来屏幕的内容,以后重绘的时候再画上去,但是放到我的程序里还是不能透明.另外我自己也继承CStatic写了一个透明静态框类,也是用上述办法企图实现对背景图片透明,但也不行.
    它们都是截取了对话框出现之前原屏幕的内容,而不是对话框背景图在该位置的内容!搞了半天,最后我发现如果将对话框的 clip children 风格重新勾上,所有的控件就真正对背景图片透明了!! 这个风格害死人啊!但是原来的问题又回来了,现在所有的控件又到背景图片下面去了,只有鼠标划过的时候才能看到!到底怎么样把所有控件显示在最上层,而且不动用clip children风格呢?clip children到底是什么意义?会不会是我的绘图代码有问题?
    大家帮忙看一下,问题解决马上散分!代码如下:BOOL CCATDlg::OnEraseBkgnd(CDC *pDC)
    {   if(IsBackGroudImage)
    {
    CFile   file(strFilePathName,CFile::modeRead|CFile::shareDenyWrite);
    CArchive   ar(&file,CArchive::load|CArchive::bNoFlushOnDelete);
    CArchiveStream   stream(&ar);
    HRESULT   hr   =   OleLoadPicture((IStream*)&stream,   0,   FALSE,   IID_IPicture,   (void   **)&m_pPic);
    file.Close();  
    CRect   ShowRect;
    pDC = GetDC();
    GetClientRect(&ShowRect);
    long  lWidth,lHeight;  
       
    m_pPic->get_Width((OLE_XSIZE_HIMETRIC*)&lWidth);
    m_pPic->get_Height((OLE_YSIZE_HIMETRIC*)&lHeight);
    CDC tempDC;
    tempDC.CreateCompatibleDC(pDC);
    CBitmap   bmp;
    bmp.CreateCompatibleBitmap(pDC,ShowRect.Width(),ShowRect.Height()); CBitmap   *OldBmp=tempDC.SelectObject(&bmp);
    m_pPic->Render(tempDC,   0,   0,   ShowRect.Width(),   ShowRect.Height(),  0,   lHeight,   lWidth,   -lHeight,   NULL);
    m_pPic->Release(); pDC->BitBlt(ShowRect.left,   ShowRect.top,   ShowRect.Width(),   ShowRect.Height(),   &tempDC,   0,   0,   SRCCOPY);
    tempDC.SelectObject(OldBmp);
    ReleaseDC(&tempDC);
    bmp.DeleteObject();
    return true; }
    else
    {
    return   CDialog::OnEraseBkgnd(pDC);
    }
    }   
      

  10.   

    说错了,是把clip children设成false控件就透明了!
      

  11.   

    我也遇到过这种问题,要想控件相对于主话框透明,主对话框就不能有clip children属性,没有了clip children属性,主对框在改变大小并重绘时,控件部分又会发生闪烁,想了很久也没找到一种比较让人满意又两种功能都兼有的方法.最后实在没法,设置主对话框没有clip children属性,在OnPaint函数中得到不想让对话框重画控件区域的矩形,再用dc.ExcludeClipRect(&rect)函数clip掉这块区域,这们对话框重绘时,这块区域就不会出现闪烁了
      

  12.   

    不是的啊,我的自绘界面就是clip children,有2个透明static控件,就是在onctlcolor里pdc->系列操作