none
VC 中, 要使一个CStatic 对像(文本) 变透明, 要重载什么函数? RRS feed

答案

  • 没有虚函数。需要添加WM_CTLCOLOR消息的映射。
    MSMVP VC++
    • 已标记为答案 huabin 2009年2月14日 14:01
    2009年2月13日 18:46
    版主
  • 比如你的CStatic是创建在对话框上的, 那就重载你的对话框的WM_CTLCOLOR消息 , 如:

    HBRUSH CMydilog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
     
      int nID = pWnd->GetDlgCtrlID(); 
     
    f( nID == IDC_STATIC1) 
        { 
            pDC->SetTextColor( cl ); 
            pDC->SetBkMode(TRANSPARENT); 
     
        
        } 


    相信命运
    • 已标记为答案 huabin 2009年2月17日 8:36
    2009年2月17日 4:59
    版主

全部回复

  • 没有虚函数。需要添加WM_CTLCOLOR消息的映射。
    MSMVP VC++
    • 已标记为答案 huabin 2009年2月14日 14:01
    2009年2月13日 18:46
    版主
  • VC6.0中加 WM_CTLCOLOR 消息很容易.

    1) VC++2005 加WM_CTLCOLOR 消息好难加呀. 请问在VC++2005中如何加消息?


    2) 有人说要 "重载了父窗口的 OnCtlColor".

        "重载了父窗口的 OnCtlColor"  和 "添加WM_CTLCOLOR消息" 是一样的(我认为是), 但哪种说法更合理,请解释一下.
    • 已标记为答案 huabin 2009年2月14日 14:01
    • 取消答案标记 huabin 2009年2月14日 14:01
    2009年2月14日 9:27
  • WM_CTLCOLOR是发送到控件父窗口的,不过可以用消息反射让父窗口把消息转给控件自己处理。参考MFC TN062
    MSMVP VC++
    2009年2月15日 3:22
    版主
  • 比如你的CStatic是创建在对话框上的, 那就重载你的对话框的WM_CTLCOLOR消息 , 如:

    HBRUSH CMydilog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
     
      int nID = pWnd->GetDlgCtrlID(); 
     
    f( nID == IDC_STATIC1) 
        { 
            pDC->SetTextColor( cl ); 
            pDC->SetBkMode(TRANSPARENT); 
     
        
        } 


    相信命运
    • 已标记为答案 huabin 2009年2月17日 8:36
    2009年2月17日 4:59
    版主