更改编辑控件的背景色的困难
Difficulties in changing the background color of edit control
我在一个对话框中拥有编辑控件,该对话框的输入将被检查是否有效。
如果输入无效,我应该通过更改编辑控件的背景色来指示有效性,否则我什么都不做
我正在EN_CHANGE
处理程序中检查输入,如果输入无效,我将编辑控件的句柄存储在向量中。最后我调用InvalidateRect( (HWND)lParam, NULL, TRUE );
,这样编辑控件就可以重新绘制成合适的颜色。
为了重新绘制编辑控件,我正在像这样处理WM_CTLCOLOREDIT
:
case WM_CTLCOLOREDIT:
{
bool IsInvalid = false; // does this edit control hold invalid text ?
// vector InvalidInput contains handles of edit controls
// with invalid input, so we check if our window is stored there
for( vector<HWND>::size_type i = 0;
!IsInvalid && ( i < InvalidInput.size() ); i++ )
{
if( InvalidInput[i] == (HWND)lParam )
IsInvalid = true;
}
// if input is invalid change background color to light gray
if( IsInvalid )
{
// Needed SetBkMode for text background transparency
SetBkMode( (HDC)wParam, TRANSPARENT );
// return light gray brush
return (INT_PTR)( (HBRUSH)GetStockObject( LTGRAY_BRUSH ) );
}
else
return FALSE; // say we didn't handle it
// so dialog procedure can do that for us
}
在我启动程序后,编辑控件被正确绘制。
在我键入之后,有效条目将正确绘制编辑控件。
在之后立即键入无效字符后,背景颜色变为浅灰色,一切似乎都很正常。
如果删除无效字符,则背景将保持灰色,而不是返回到默认的系统颜色。
我做错了什么?我该如何解决?
编辑:
如果我把InvalidateRect()
放在IDC_MYEDIT
的WM_COMMAND
处理程序中,那么问题似乎消失了:
case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDC_MYEDIT:
{
if( HIWORD(wParam) == EN_CHANGE )
{
//do your validation stuff
}
InvalidateRect(...);
}
break;
// the rest of the code...
错误在这里
else
return FALSE; // say we didn't handle it
// so dialog procedure can do that for us
WM_CTLCOLOREDIT
消息被列为返回FALSE
表示"未处理"规则的特殊例外之一。必须处理。如果您不想处理它,可以将消息传递给DefWindowProc
。
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 查找素数:错误:控件到达非void函数的末尾
- C++ 获取"控件可能会到达约翰逊-特罗特代码上的非空函数的末尾
- 如果我有五个 Win32 静态控件,如何使用特定的前景色设置其中一个?
- 如何设置 RTF 编辑控件的背景色
- 更改编辑控件的背景色的困难