如何给STATIC控件设置背景色

时间:2021-10-24 14:52:16
如题我做了一个月历的对话框,功能都已经实现了,但是贴图发现了一个问题,也有一点疑问。
如何给STATIC控件设置背景色
如图,我用的是白色的背景图片,可以看的出来,STATIC控件的背景色没变,还是以前的那个,所以看的很奇怪。
1号之前的日期和超出月底最后一天之后的日期,全部都是用的灰色表示
在OnCtlColor里,代码都是
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(128,128,128));
,但是现在发现了控件的背景色没改,于是又加上 pDC-> SetBkColor(RGB(255,250,250));
但是没效果,
现在就想问问,如何才能将控件的背景色设置为对话框的背景,在模板里我将控件设定成具有透明背景,也没效果,
请教如何操作!!!

6 个解决方案

#1


所有的控件都是 STATIC 控件?

#2


CTLCOLOR_BTN                按钮控件
CTLCOLOR_DLG                对话框
CTLCOLOR_EDIT               编辑框
CTLCOLOR_LISTBOX            列表控件
CTLCOLOR_MSGBOX             消息控件
CTLCOLOR_SCROLLBAR          滚动条控件
CTLCOLOR_STATIC             静态控件

你是不是拦截的消息不对,不是控件的ID,是控件的类型

#3


	
if(nCtlColor==CTLCOLOR_STATIC)          //更改按钮颜色
 {
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(121,121,255));   
HBRUSH b=CreateSolidBrush(RGB(121,121,255));
return b;
}

#4



if (pWnd->GetDlgCtrlID() == IDC_STATIC)           
    {  
        pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);  
    }

这样可以背景透明

#5


引用 4 楼 zmyouren1983 的回复:

if (pWnd->GetDlgCtrlID() == IDC_STATIC)           
    {  
        pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);  
    }

这样可以背景透明

这只能将字的背景 变成透明,我已经试过了,而且,日历里的那些红色的灰色的字就是这样做的,控件的背景还是没变

#6


我貌似发现问题所在了,可能正如上面各位说的,是类型判断的有问题,这次我是在OnCtlColor里直接声明了一个白色的画刷,
然后直接在判断的外面将背景设置成透明的,然后在判断,然后直接将白色的画刷返回,就可以了!

#1


所有的控件都是 STATIC 控件?

#2


CTLCOLOR_BTN                按钮控件
CTLCOLOR_DLG                对话框
CTLCOLOR_EDIT               编辑框
CTLCOLOR_LISTBOX            列表控件
CTLCOLOR_MSGBOX             消息控件
CTLCOLOR_SCROLLBAR          滚动条控件
CTLCOLOR_STATIC             静态控件

你是不是拦截的消息不对,不是控件的ID,是控件的类型

#3


	
if(nCtlColor==CTLCOLOR_STATIC)          //更改按钮颜色
 {
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(121,121,255));   
HBRUSH b=CreateSolidBrush(RGB(121,121,255));
return b;
}

#4



if (pWnd->GetDlgCtrlID() == IDC_STATIC)           
    {  
        pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);  
    }

这样可以背景透明

#5


引用 4 楼 zmyouren1983 的回复:

if (pWnd->GetDlgCtrlID() == IDC_STATIC)           
    {  
        pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);  
    }

这样可以背景透明

这只能将字的背景 变成透明,我已经试过了,而且,日历里的那些红色的灰色的字就是这样做的,控件的背景还是没变

#6


我貌似发现问题所在了,可能正如上面各位说的,是类型判断的有问题,这次我是在OnCtlColor里直接声明了一个白色的画刷,
然后直接在判断的外面将背景设置成透明的,然后在判断,然后直接将白色的画刷返回,就可以了!