我最近在做一个项目,在xp下用vc6,而用户又对界面做了一定的要求,真是愁死我了!我现在的做法是在对话框上用图片框分成若干个小块,每一块的颜色不同,图片框上面有2个静态文本框和1个edit。我现在的麻烦就是,无法让显示的文字外边的框去掉,不能针对图片框透明显示。顺便说一下,pDC->SetBkMode(TRANSPARENT);对对话框好用,可是对图片框就不好用了,期待高手指点。

解决方案 »

  1.   

    在OnCtlColor中
    HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        switch   (nCtlColor)
        {
        case CTLCOLOR_EDIT:
            {             
                CBrush brush;
                pDC->SetBkMode(TRANSPARENT);
                brush.CreateStockObject(NULL_BRUSH);             
                return brush;
            }
        }
        return hbr;
    }
      

  2.   

    sorry,贴错,如下.
    在OnCtlColor中HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        switch   (nCtlColor)
        {
        case CTLCOLOR_STATIC:
            {             
                CBrush brush;
                pDC->SetBkMode(TRANSPARENT);
                brush.CreateStockObject(NULL_BRUSH);             
                return brush;
            }
        }
        return hbr;
    }
      

  3.   

    return brush返回背景画刷,系统用它来更新static 控件的背景.
      

  4.   

    2楼正解
    如果只想把其中一个标签设为透明,可以在OnCtlColor中再用pWnd来判断。
      

  5.   

    补充一句,CDialog::OnCtlColor应放在最后。
    HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        if (nCtlColor == CTLCOLOR_STATIC)
        {
            CBrush brush;
            pDC->SetBkMode(TRANSPARENT);
            brush.CreateStockObject(NULL_BRUSH);             
            return brush;
        }
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
      

  6.   

    CBrush brush; 要作为类的成员变量吧,要不然好象是不会起作用的,多年前自绘个界面,记得好象是这样的。
      

  7.   

    不好意思!这几天手里两个项目忙得晕头转向的,最近在做另外一个,我会尽快试一下,看看很多高手都很同意网友sjdev的做法,应该会好用,在这里,真心感谢每个热心的网友。
    明天是小年,大家过年好!
      

  8.   

    如果想让label控件透明,只要修改OnCtrlColor事件即可,至于涉及到图片框,我的经验是得到label的大小GetClientRect(&rect);,用图片框的颜色来填充label控件FillSolidRect(0, 0, rect.right, rect.bottom, RGB(123, 23, 4));,这样就好用的,我试验过的。