在窗体上面添加radio button 控件,窗体有图片背景,现在想让radio button透明,显示出背景图片来,应该怎样实现。HBRUSH CTopListView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔
if(pWnd->GetDlgCtrlID()==IDC_RADIO_one || pWnd->GetDlgCtrlID()==IDC_COMBOBOXEX1)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,255,0));
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
return hbr;
}
代码如上面,但是实现不了透明,如果是static text控件的话可以实现,求高人指点!
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔
if(pWnd->GetDlgCtrlID()==IDC_RADIO_one || pWnd->GetDlgCtrlID()==IDC_COMBOBOXEX1)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,255,0));
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
return hbr;
}
代码如上面,但是实现不了透明,如果是static text控件的话可以实现,求高人指点!
dc.SetBkMode(TRANSPARENT);
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
m_hInstance = LoadLibrary("User32.DLL");
if(m_hInstance)
{
//取得SetLayeredWindowAttributes函数指针
m_pFunc=(TRANFUNC)GetProcAddress(m_hInstance, "SetLayeredWindowAttributes");
m_pFunc(GetSafeHwnd(),0,128,2);
}
恩,我会看的,那样是自己派生类了,我想用static text实现透明的方法实现radio button的透明
把图片选入画刷试试
if(pWnd->GetDlgCtrlID()==IDC_RADIO1)
{
//pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);
return m_brush;
}
应该可以吧,注意返回 m_brush;
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
CBrush brush;
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_STATIC){
pDC->SetBkMode(TRANSPARENT);
hbr=(HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
我以前是这样做的,反正我是看不出来有白色背景,要不你就去掉radio button 上面的文字,并把它拖到最小吧,然后它的文字直接用static text显示就好了,
把radio button拖到最小但是它是一个方形的,按钮时圆形的,周围还有白色的边缘。这样应该实现不了。
谢谢你的提议,现在radio button可以改成和背景图一样的颜色,只是圆形按钮还是白色中空的。看看怎么改进。
这里虽然没讲radiobutton但是原理是一样的
radio就是button
http://blog.csdn.net/xianglitian/article/details/1724017