在窗体上面添加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控件的话可以实现,求高人指点!

解决方案 »

  1.   

    派生一个子类,在OnPaint里画,画的时候设置下
    dc.SetBkMode(TRANSPARENT);
      

  2.   

    onpaint里面应该如何画?能不能发下代码?
      

  3.   

    我就是用OnCtlColor()对Radios Button做过处理。
      

  4.   

    换成控件句柄试试: //要使窗体透明必须修改窗体属性
    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); 

    }
      

  5.   

    我的是sdi,在视图上添加的radio button 没有这个初始化函数啊。。我用dialog试了也不行,m_hInstance  m_pFunc 未标识的变量。
      

  6.   

    VC6下可以透明,VC7就不行了,必须重载自绘。
      

  7.   

    属性设置成Transparent后,radio button变成黑色的了,还是不行。
      

  8.   

    OnCtrlColor函数先去掉,试一下
      

  9.   

    楼主关注下2楼方法,绝对靠谱,自己对着msdn仔细参详能明白的
      

  10.   


    恩,我会看的,那样是自己派生类了,我想用static text实现透明的方法实现radio button的透明
      

  11.   

    你是实现radio button透明了?代码没错。
      

  12.   

    在OnPaint里画,这个不用教了吧,否则要自己打好基本功了
      

  13.   

    http://hi.baidu.com/tianylj/blog/item/6573bf3d717d1404bba1673e.html
    把图片选入画刷试试
    if(pWnd->GetDlgCtrlID()==IDC_RADIO1)
    {
    //pDC->SetTextColor(RGB(255,0,0));
    pDC->SetBkMode(TRANSPARENT);
      return m_brush;
    }
    应该可以吧,注意返回  m_brush;
      

  14.   

    HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    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显示就好了,
      

  15.   


    把radio button拖到最小但是它是一个方形的,按钮时圆形的,周围还有白色的边缘。这样应该实现不了。
      

  16.   

    呵呵,我基本功真不好,刚接触mfc一个月,能教教我么?
      

  17.   


    谢谢你的提议,现在radio button可以改成和背景图一样的颜色,只是圆形按钮还是白色中空的。看看怎么改进。
      

  18.   

    可以使用 Static 控件来代替,radio button,我以前也这样用过。设置一个状态变量来保存点击某个 Static 就行了。
      

  19.   

    自绘控件你可以看看这些文章
    这里虽然没讲radiobutton但是原理是一样的
    radio就是button
    http://blog.csdn.net/xianglitian/article/details/1724017
      

  20.   

    static控件,鼠标点击后能发生改变么?