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;
} 展开
代码大致如下:
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;
} 展开
1个回答
展开全部
很简单啊,从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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询