背景色がユーザー入力の有効性に依存する編集コントロールがあります。
入力が有効な場合、編集コントロールはデフォルトの外観を維持する必要があります。そうでない場合、背景色は明るい灰色に変更されます。
ハンドラーで有効性をチェックしています。EN_UPDATE
無効な場合はHWND
、編集コントロールをに保存しvector
ます。
ビジュアル スタイルが有効になっています。
問題は、マウス ポインターの位置を変更したときに発生します。それを説明しましょう:
編集コントロールをクリックして、無効な入力を入力します。
マウス ポインターを別の場所に移動しましたが、編集コントロールにはまだフォーカスがあります。
を押して無効な入力を削除しますbackspace。
入力が有効になるとすぐに色が適切に変わりますが、境界線が太くなったり暗くなったりします。
これらの図は、問題を示しています。
データを入力する前にコントロールを編集します。
ユーザーが無効なデータを貼り付けたときの編集コントロール (マウス ポインターが灰色の領域にある):
最後の文字はr
.
マウス ポインターが編集コントロールのクライアント領域 (たとえば、ダイアログのクライアント領域) の外にあり、ユーザーがここを削除すると、次のようになります。r
太い境界線に注目してください。
マウス ポインタが編集コントロールの上に置かれると、適切に再描画されます。
関連するコード スニペットを次に示します (必要に応じて、小さなSSCCEを送信できます)。
// minimal code snippet for EN_UPDATE
case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDC_MYEDIT:
{
if( HIWORD(wParam) == EN_CHANGE )
{
if( /* invalid input */ )
{
// store HWND into vector
}
// InvalidateRect(...); // tried this too...
}
}
break;
// minimal code snippet for WM_CTLCOLOREDIT
case WM_CTLCOLOREDIT:
{
if( /* this control is stored in vector */ )
{
//=== then this is invalid entry->paint it grey ===//
// Needed SetBkMode for text's background transparency
SetBkMode( (HDC)wParam, TRANSPARENT );
// return light gray brush
return (INT_PTR)( (HBRUSH)GetStockObject( LTGRAY_BRUSH ) );
}
else
return DefWindowProc( ... ); // default processing
}
どうすればこれを修正できますか?