突出显示Win32编辑控件以指示它是现在填充的控件

时间:2009-06-18 10:59:33

标签: windows user-interface winapi

我有一个Win32 GUI应用程序,它有几个编辑控件(普通的旧“EDIT”类名)。

逻辑是用户要填写应用程序选择的编辑框。为了更清楚地说明要填写哪一个,我想以某种方式突出显示“当前”编辑框。然后,当用户完成输入并要求应用程序继续时,编辑框必须再次变为“通常”。

理想的方法是用选择的颜色绘制背景。我怎么能实现这个或类似的选择 - 也许我可以替换用于临时绘制控件的画笔?如果使用编辑控件无法实现从Win2k开始的Windows中可用的替换控件吗?

1 个答案:

答案 0 :(得分:5)

您可以在父窗口中处理编辑控件的WM_CTLCOLOREDIT notification。在即将绘制编辑控件时发送通知。因此,一般情况下,您可以使用RedrawWindow或其他东西来强制重绘,然后处理不可避免的控件颜色通知。在此,您可以为通知传递的设备上下文设置前后颜色:

LRESULT OnControlColorEdit(HWND hwnd, DWORD msg, WPARAM wParam, LPARAM lParam)
{
   if( !toHighlight ) {
       return DefWindowProc( hwnd, msg, wParam, lParam );
   }
   HDC dc = reinterpret_cast<HDC>(wParam);
   ::SetBkColor(dc, whatever);
   ::SetTextColor(dc, whatever);
   HBRUSH brush = // create a solid brush of necessary color - should cache it and destroy when no longer needed
   return reinterpret_cast<LRESULT>( brush );
}
相关问题