質問

実行時に CEdit コントロールの背景色を変更する方法を誰かが簡単に教えてくれませんか?フィールドの長さがゼロの場合は背景を赤に、それ以外の場合は通常の白に変更できるようにしたいと考えています。

役に立ちましたか?

解決

単純な CEdit ではこれを行うことはできません。いくつかのビットをオーバーライドする必要があります。

独自の ON_WM_CTLCOLOR_REFLECT ハンドラーを実装し、ハンドラーで色の付いた CBrush を返します。

(大まかに言うと、通常のリソース管理をそこに配置する必要があります。デストラクターでブラシを削除することを忘れないでください)

class CColorEdit : public CEdit
{
  ....
  CBrush   m_brBkgnd;
  afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
  {
    m_brBkgnd.DeleteObject();
    m_brBkgnd.CreateSolidBrush(nCtlColor);
  }
}

他のヒント

これは、CEditから派生せずに行うこともできます。

  1. ダイアログの BEGIN_MESSAGE_MAP()コードブロックに ON_WM_CTLCOLOR()を追加します。
  2. ダイアログクラスに OnCltColor()を追加します。

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. OnCtlColor()を次のように実装します:

    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if ((CTLCOLOR_EDIT == nCtlColor) &&
            (IDC_MY_EDIT == pWnd->GetDlgCtrlID()))
        {
            return m_brMyEditBk; //Create this brush in OnInitDialog() and destroy in destructor
        }
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top