MFC中,如何设置动态创建的控件背景变成透明

之前在设置静态控件的时候,可以直接添加OnCtlColor()函数解决控件的透明问题,但是我现在动态创建了一个checkbox,现在的问题是该checkbox动态出现的时候背景不是透明的,所以寻求大神支招,万分感谢~
代码大致如下:
void CMFC_TestDlg::OnCbnSelchangeComboCity()
{
CButton* p_station;
p_station = new CButton;
p_station->Create(_T("获取更多数据"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, CRect(320, 14, 470, 32), this, IDC_STATION);

CFont* font = this->GetFont();
p_station->SetFont(font);
p_station->SetCheck(true);
}

HBRUSH CMFC_TestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(pWnd->GetDlgCtrlID())
{
case IDC_STATIC:
case IDC_COMBO_CITY:
case IDC_MSG:
case IDC_STATION:
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
default:
break;
}
return hbr;
}

很简单啊,从CButton派生一个类,处理WM_CTLCOLOR反射消息,然后同样

pDC->SetBkMode(TRANSPARENT);  
return (HBRUSH)GetStockObject(NULL_BRUSH);  

即可。


像这样:

BEGIN_MESSAGE_MAP(CButtonEx, CButton)
//{{AFX_MSG_MAP(CButtonEx)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CButtonEx message handlers

HBRUSH CButtonEx::CtlColor(CDC* pDC, UINT nCtlColor) 
{
// TODO: Change any attributes of the DC here

// TODO: Return a non-NULL brush if the parent's handler should not be called
return NULL;
}

温馨提示:答案为网友推荐,仅供参考
MFC中,如何设置动态创建的控件背景变成透明
很简单啊,从CButton派生一个类,处理WM_CTLCOLOR反射消息,然后同样 pDC->SetBkMode(TRANSPARENT); return (HBRUSH)GetStockObject(NULL_BRUSH);即可。像这样:BEGIN_MESSAGE_MAP(CButtonEx, CButton)\/\/{{AFX_MSG_MAP(CButtonEx)ON_WM_CTLCOLOR

MFC中,为什么设置不了控件Groupbox的背景透明?该怎么处理
经过多次的测试,发现:1、 直接拖一个控件到界面上,通过属性栏里设置Transparent的值为TRUE,可以实现我需要的效果。而且这个的Group Box背景和DLG一致。2、属性栏里的Transparent值为FALSE。加入如下WM_CTLCOLOR消息代码处理,无效。C\/C++ codeif(nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRAN...

mfc基本对话框中的控件透明到背景图片
首先需要识别出具体的控件,可以通过调用GetDlgCtrlID()函数获取控件ID进行判断。例如,如果需要使控件ID为123的控件透明,可以这样写:if(pWnd->GetDlgCtrlID()==123) { 接下来设置设备上下文的背景模式为透明,使用SetBkMode()函数,并将背景颜色设置为透明,这一步可以使用SetBkColor()函数,但由于背景模式...

MFC中怎么显示一副图片使其背景透明
包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt 函数的使用 Transpa...

...加入位图做背景之后,登陆框无法透明背景,有白底,有解决的办法吗...
响应对话框的WM_CTLCOLOR消息,在里面把各个空间的模式设置成透明模式,即调用CDC::SetBkMode(TARNSPARENT)

MFC中如何使用CPictureEx类加载透明背景的gif动态图片。
1、在VC中添加gif图片到工程。。并命名为IDR_FLAG 2、新建类PictureEx。。。注:其基类为CStatic 3、在对话框中添加图片控件。。其ID为IDR_FLAG并通过ClassWizard添加成员m_Flag 类型为CPictureEx 4、在初始化函数BOOL CSCommTestDlg::OnInitDialog() 中添加以下语句 if(m_Flag.Load(MAKEINTRESOURCE(...

TRANSPARENTWindows C++
在MFC中,CDC类提供了功能强大的SetBkMode()函数,允许我们设定背景模式。该函数的第二个参数可以设置为OPAQUE(不透明)或TRANSPARENT(透明)。在处理字符串输出时,如果背景颜色与输出内容冲突,可能会破坏整体视觉效果。例如,如果按钮的黑色文字置于灰色背景上,我们需要调整输出策略以保持背景不变。为了...

SetBkMode基本概述
在MFC框架中,通过CDC类提供的SetBkMode函数,我们可以设置当前设备的背景模式。这个函数接受两个参数:一个设备上下文句柄hdc,另一个是模式的整数值,可以是OPAQUE或TRANSPARENT。通过调整背景模式,我们可以在输出文字时,保持背景颜色不变。例如,假设按钮的背景颜色为灰色,而我们需要在按钮上输出黑色的文字...

MFC中如何设置对话框上Static控件的背景
在CTCOLOR里面做 BRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);switch(pWnd->GetDlgCtrlID()){ case IDC_STATICC:pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(RGB(0,255,0));return (HBRUSH)GetStockObject(...

VC如何设置对话框的背景为透明效果?
\/\/在OnInitDialog里进行初始化,添加如下代码 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);HINSTANCE hInst = LoadLibrary("User32.DLL");if(hInst){ typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);MYFUNC fun = NULL;\/\/...

相似回答