静的テキストボックス(CStatic)自己描画

2532 ワード

概要:
透明な背景
詳細:
透明な背景:
  • 第1の方法
  • コントロールのサブクラス化:
    class CStaticEx : public CStatic

    応答WM_PAINTメッセージ:
    void CStaticEx::OnPaint()
    
    {
    
        CPaintDC dc(this); // device context for painting
    
        // TODO:  
    
        CRect rect;
    
        GetClientRect(&rect);
    
        CString strText;
    
        GetWindowText(strText);
    
        CFont *pFont, *pOldFont;
    
        pFont = GetFont();
    
        pOldFont = dc.SelectObject(pFont);
    
        dc.SetBkMode(TRANSPARENT);
    
        dc.DrawText(strText, &rect, 0);
    
        dc.SelectObject(pOldFont);
    
        // Do not call CStatic::OnPaint() for painting messages
    
    }
  • 第2の方法:
  • 親ウィンドウ応答WM_CTLCOLORメッセージ:
    HBRUSH CCStatic_0100Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    
    {
    
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    
    
        // TODO:  Change any attributes of the DC here
    
        if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
    
        {
    
            pDC->SetBkMode(TRANSPARENT);
    
            pDC->SetTextColor(RGB(255, 0, 128));
    
            return (HBRUSH)GetStockObject(NULL_BRUSH);
    
        }
    
        // TODO:  Return a different brush if the default is not desired
    
        return hbr;
    
    }
  • ただしサブコントロールがSetWindowText関数設定テキストを呼び出すと、テキストは
  • 重なります.