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

之前在设置静态控件的时候,可以直接添加OnCtlColor()函数解决控件的透明问题,但是我现在动态创建了一个checkbox,现在的问题是该checkbox动态出现的时... 之前在设置静态控件的时候,可以直接添加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;
}
展开
 我来答
intehel
推荐于2018-04-02 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1774万
展开全部

很简单啊,从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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式