HBRUSH CDemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(TRANSPARENT);
// TODO: Change any attributes of the DC here
if(nCtlColor == IDC_EDIT1)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(TRANSPARENT);
} if(nCtlColor == IDC_BUTTON1)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(TRANSPARENT);
} if(nCtlColor == IDC_PROGRESS2)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}这是我的代码。
通过vc6.0 add window message handler添加OnCtlColor 函数
但是背景没有改变,
哪里出错了??
求大神指点 控件IDC背景VC

解决方案 »

  1.   

    pDC->SetBkMode(TRANSPARENT);//这句是设置DC里文本绘制时是否有背景
    pDC->SetBkColor(TRANSPARENT);//这句是设置DC里文本背景颜色,参数不应该是TRANSPARENT
    最关键的是,你必须返回一个空画刷,而不是CDialog::OnCtlColor返回的那个.
    正确方法:return (HBRUSH)GetStockObject(NULL_BRUSH);//返回一个空画刷
    参考:标签背景透明以及文字重叠问题解决方法
    http://bbs.csdn.net/topics/390401008
      

  2.   

    另外:这种方式在标签、编辑框等控件文字刷新时会导致"重影"
    单纯是标签的话,可以参考上面地址的解决方法.
    按钮、编辑框或其他控件,最好是在控件本身的消息里绘制.
    参考:
    自绘实现半透明水晶按钮
    http://bbs.csdn.net/topics/390336507