0

色を変更する必要がある非読み取り専用の編集コントロールがあるため、WM_CTLCOLOREDIT を処理します。連続して入力している場合はうまく機能しますが、問題は、バックスペースを押したり、削除したり、既存のテキストの途中から入力を開始したりすると、表示がすべて乱雑になることです。親のサイズを変更するなどして再描画するまで、それは残ります。これを修正するにはどうすればよいですか?

編集:いくつかの詳細。この問題は、背景色が設定されている場合にのみ発生し、テキストの色だけが設定されている場合には発生しません。コードは次のようになります

ON_MESSAGE(WM_CTLCOLOREDIT, OnEditColor)

LRESULT CMyWindow::OnEditColor(WPARAM wp, LPARAM lp)
{
    HDC hdc = (HDC)wp;
    HWND hwnd = (HWND)lp;
    if(hwnd == m_edit.GetSafeHwnd())
    {
    //  SetBkMode(hdc, TRANSPARENT);
        MyControlInfo*pcti;// accessed from somewhere
        SetTextColor(hdc, pcti->theme.clrText);
    //  return (LRESULT)pcti->brush.GetSafeHandle();
    }
    return 0;
}

ありがとう

4

3 に答える 3

1

これがこのコードによって引き起こされているのではないかと疑っています。エディット コントロールをサブクラス化し、ペイントをオーバーライドしようとすると、このような問題が発生します。386SUX で実行する必要がある Windows バージョン 2 と 20 年間の appcompat により、Microsoft はこのコントロールを修正できず、WM_PAINT メッセージ ハンドラーでしか描画されませんでした。バックスペースすると、実際に画面に直接描画されます。回避策はありません。

前の質問と同じコメントが適用されます。実際の編集コントロールを使用してください。

于 2011-03-31T15:45:58.197 に答える
1

SetBkColor で背景色を設定し (SetBkMode は使用しないでください) 、有効なブラシを返す必要があります。(コントロールがどのように描画を行うかはわかりません。ETO_OPAQUE などで ExtTextOut を自由に使用できます)

于 2011-03-31T15:46:42.223 に答える
0

http://msdn.microsoft.com/en-us/library/bb761691(v=vs.85).aspx

戻り値

アプリケーションがこのメッセージを処理する場合、ブラシのハンドルを返す必要があります。システムは、ブラシを使用してエディット コントロールの背景を描画します。

したがって、次のようなものを試してください:

return static_cast<LRESULT>(::GetSysColorBrush(COLOR_WINDOW));
于 2011-03-31T16:30:15.200 に答える