• 解説

    Visual C++でボタンコントロールなどの文字色を変更したいときプロパティなどで手軽に変更することができません。
    面倒でも自分で描画しなければなりません。フォーカスがあるという状態や押している状態までもです(ボタンの枠が黒囲になっている状態や引っ込んでいる状態)。

    方法はコントロールをオーナードローにしOnDrawItem(WM_DRAWITEMメッセージ)で描画します。

  • サンプル(文字色を赤にします)

    void クラス名::OnDrawItem(int IDCtl, LPDRAWITEMSTRUCT DrawItemStruct)
    {
        if (DrawItemStruct->CtlType != ODT_BUTTON ||
            IDCtl != IDOK)
        {
            CDialog::OnDrawItem(IDCtl, DrawItemStruct);
    
            return;
        }
    
        CDC *pDC = CDC::FromHandle(DrawItemStruct->hDC);
    
        UINT State = DFCS_BUTTONPUSH;
    
        if (DrawItemStruct->itemState & ODS_SELECTED)
            State |= DFCS_PUSHED;
    
        if (!GetDlgItem(DrawItemStruct->CtlID)->IsWindowEnabled())
            State |= DFCS_INACTIVE;
        else
            pDC->SetTextColor(RGB(255, 0, 0));
    
        pDC->DrawFrameControl(&DrawItemStruct->rcItem, DFC_BUTTON, State);
    
        if (DrawItemStruct->itemState & ODS_FOCUS)
        {
            CRect    FocusRect(DrawItemStruct->rcItem);
    
            FocusRect.left += 3;
            FocusRect.top += 3;
            FocusRect.right -= 3;
            FocusRect.bottom -= 3;
    
            pDC->DrawFocusRect(FocusRect);
        }
    
        CString Caption;
    
        GetDlgItem(DrawItemStruct->CtlID)->GetWindowText(Caption);
    
        pDC->DrawText(Caption, &DrawItemStruct->rcItem,
                         DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    }
    

説明がわからないなどありましたらお問い合わせでお知らせください。

ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。