关于radio控件透明

发布时间:2012年12月13日 作者:未知 查看次数:1339

关于radio控件透明


http://blog.csdn.net/kingli_2008/article/details/6765753

Static 控件,radio 控件都能很好的透明,直接在Onc 中使用如下代码,就可以解决,

HBRUSH CWinpePwdDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  Change any attributes of the DC here

     UINT nID = pWnd->GetDlgCtrlID();
     if (IDC_STATIC ==  nID
         || IDC_STATIC_TIP == nID
         || IDC_CHECK_INPUT_PASSWORD == nID)
     {
     
         pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);

     }
    return hbr;
}


但是Checkbox 则不行,出现黑黑的一块。

Checkbox 在以前是可以的,就是没有使用xp样式时,用上面的代码就可以做到透明,但使用xp样式后就出现黑黑的一块了。不知微软咋搞的, 越来越退步了。

在使用xp风格的情况下,解决方法:(1)把Checkbox缩至最小,然后用static 控件来添加文本描述。(2)花点时间重绘控件了。

 

补充:API涵数

消息WM_CTLCOLORSTATIC

WndProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
...
 .elseif uMsg==WM_CTLCOLORSTATIC
  invoke GetDlgCtrlID,lParam
  .if eax==IDC_STATIC
   invoke SetBkMode,wParam,TRANSPARENT
   invoke GetStockObject,HOLLOW_BRUSH
  .endif
  ret
 .else
...
 .endif
 mov eax,TRUE
 ret
WndProc endp

static控件可以透明,就是radio控件不能透明啊

 



版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110