静态文本框变透明,灰化的edit框竟然也跟着变了
我要使界面变的漂亮一点,所以在OnCtlColor里画了背景色:
if ((nCtlColor== CTLCOLOR_DLG))
{
HBRUSH hEditBr   =   ::CreateSolidBrush(g_FormBgc);  
return   hEditBr;  
}
但是静态文本框还是灰色的,所以我又把静态文本框变透明了
if ((nCtlColor== CTLCOLOR_STATIC))
{
HBRUSH   hNullBr   =   (HBRUSH)::GetStockObject(NULL_BRUSH);  
pDC->SetBkMode(TRANSPARENT);//透明
return hNullBr; 
}
这个时候灰化的edit框竟然变成了黑色的。
于是我又把静态文本框变成其他颜色:
if ((nCtlColor== CTLCOLOR_STATIC))
{
pDC->SetBkColor(RGB(255,255,0)); //可以将所有静态框背景变色
HBRUSH hEditBr   =   ::CreateSolidBrush(g_FormBgc);  
}
这个时候灰化的edit框竟然也跟着变色了,非常头疼。大家有没有遇到过类似问题,或者有更好的办法把界面变的漂亮一点,感谢赐教!

解决方案 »

  1.   

    你搜索下CTLCOLOR_STATIC和CTLCOLOR_DLG看看他们的值是不是一样的。
      

  2.   

    不一样,
    #define CTLCOLOR_DLG            4
    #define CTLCOLOR_EDIT           1
    #define CTLCOLOR_STATIC         6我发现问题在于,edit灰化,就是禁用以后,他从CTLCOLOR_EDIT变成了CTLCOLOR_STATIC
      

  3.   

    我就说界面变的漂亮点吧.
    可以使用magicskin包,下载一个不会弹说明的版本,
    对于使用.网上有详细的使用说明,这里就不帮你粘贴了.如果自己去改变些颜色,加位图, 或者 继承一些本来就带这些功能的对话框类,可以到
    www.codeproject.com 上面代码很全.老外都是活雷锋.进去后选C++ MFC-control就可以查看很多这样的例子了;http://www.codeproject.com/dialog/ezskin.asp
      

  4.   

    弄一幅图片,贴在对话框上就OK了。何必变颜色呢?还没有那么漂亮。在Onpaint()里边画或者在背景处理函数里边贴位图都可以。
      

  5.   

    1,我准备去搞个magicskin试试。
    2, Big_Stone() 如果贴位图的话会不会图片比较大,你是用小图片平铺过去实现的吗?能不能提供点代码参考一下
      

  6.   

    根据CWnd* pWnd参数进行判断试试.
    int nid=pWnd->GetDlgCtrlID();
    if ((nCtlColor== CTLCOLOR_STATIC) && nid==IDC_STATIC)
    {
    pDC->SetBkColor(RGB(255,255,0)); //可以将所有静态框背景变色
    HBRUSH hEditBr   =   ::CreateSolidBrush(g_FormBgc);  
    }
      

  7.   

    luohongming(lhm) 的方法是可以的。
    但是我这里IDC_STATIC是要改成不同id号的,所以这里要||很多id号,
    但是这样一来,从软件工程上讲,会不会不是太好,
      

  8.   

    判断窗口的类别
    TCHAR szClass[MAX_PATH];
    GetClassName(pWnd->GetSafeHwnd(), szClass, MAX_PATH);
    if(nCtlColor == CTLCOLOR_STATIC && _tcsicmp(szClass, _T("static")) == 0)
    {
    pDC->S...
    }