我有一个编辑控件,其背景颜色取决于用户输入的有效性。
如果输入有效,编辑控件应保持默认外观,否则背景颜色应更改为浅灰色。
我正在检查有效性EN_UPDATE
处理程序,如果它无效,我存储HWND
的编辑控件到vector
.
视觉样式已启用。
当我改变鼠标指针的位置时,问题就出现了。让我描述一下:
我单击编辑控件并输入输入无效。
我将鼠标指针移到其他地方,但编辑控件仍然具有焦点。
Now I delete invalid input by pressing backspace.
一旦输入有效,颜色就会正确变化,但边框变得更粗/更暗。
这些图片很能说明问题:
Edit control before typing in data:
Edit control when user pastes invalid data ( mouse pointer is in grey area ):
最后一个字符是r
.
Now if mouse pointer is out of edit control's client area ( on dialog's client area for example ) and user deletes r
here is what I get:
注意较粗的边框。
当鼠标指针悬停在编辑控件上方时,它会正确重新绘制。
这是相关的代码片段(如果需要我可以提交一个小的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
}
我怎样才能解决这个问题?