首先我用PIC控件放了个背景图片,然后上面的空间有静态文本的有check-box的,静态文本的通过下面的方法实现了背景透明,但是有两个check-box的就不会透明,而是变成了黑色的,请问又会的吗?怎么解决呢?
代码如下:HBRUSH CLogInDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CUPEMSDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 if(pWnd->GetDlgCtrlID()==IDC_LOGIN_USER_NAME_STATIC)
{
pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_LOGIN_PWD_STATIC)
{
pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_SERVER_ADDRESS_STATIC)
{ pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_STATIC)
{ pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_STATIC_LOG_LEVEL)
{ pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_LOGIN_IS_REMEMBER)
{ pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
}
if(pWnd->GetDlgCtrlID()==IDC_DYNAMTIC_LOG)//check-box 结果运行后居然是黑色的一块
{ pDC->SetBkMode(TRANSPARENT); //属性设置为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH); //不返回画刷
} // TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
{
HBRUSH hbr = CBCGPDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
default:
return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
2.在类中重载PreSubClassWindow()这个函数...在函数中添加:ModifyStyle(0,BS_OWNERDRAW);
3.在类中重载DrawItem(..)这个函数...在函数中什么也不要加...
4.在函数中添加WM_PAINT消息...在这个消息的消息响应函数中添加你要绘制CheckBox的代码
各位记得先百度,再csdn博客搜索,然后在发帖啊