0

編集ボックスが無効になっているダイアログがありますが、テキストはデフォルトの灰色ではなく赤色で表示されます。私は次のことを試しました:

void CMyEdit::OnEnable(BOOL bEnable)
{
  CEdit::OnEnable(bEnable);

  if (bEnable)
  {
    m_BackGroundColor = kRGBWhite;
  }
  else
  {
    m_BackGroundColor = kRGBDefaultGray;
  }

  m_TextColor = kRGBRed;
  m_BackgroundBrush.DeleteObject();
  m_BackgroundBrush.CreateSolidBrush(m_BackGroundColor);

  Invalidate();
}

ただし、テキストは灰色でのみ表示されます。しかし、基本クラスの呼び出しを削除するとCEdit::OnEnable(bEnable);、新しいテキストの色が有効になります。誰かがコードの何が悪いのか説明できますか?

御時間ありがとうございます。

乾杯...

編集:(コメントを編集に移動します)申し訳ありませんが、元の投稿でそれについて言及するのを忘れました。ON_WM_CTLCOLOR()を処理する代わりに、ON_WM_CTLCOLOR_REFLECT()が処理されます。私が理解していないのは、基本クラスへの呼び出しを削除すると、テキストの色が指定された色に変更されますが、そのままにしておくと、デフォルトの灰色にしか変更されないということです。

4

2 に答える 2

2

MSDN:読み取り専用または無効になっていないエディット コントロールは、コントロールが描画されようとしているときに WM_CTLCOLOREDIT メッセージを親ウィンドウに送信します。

当然のことながら、無効な (または読み取り専用の) エディット ボックスの背景やテキストの色を変更する方法はありません。

于 2011-01-23T16:13:25.860 に答える
1

OnCtlColorハンドラーを処理する必要があり、メッセージマップにこれを入れますON_WM_CTLCOLOR()

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 //logic here, change pDC as needed, return brush to use
}
于 2010-06-18T15:53:51.043 に答える