Выделите Win32 Edit control, чтобы указать, что это тот, который нужно заполнить сейчас - PullRequest
1 голос
/ 18 июня 2009

У меня есть приложение Win32 GUI, которое имеет несколько элементов управления редактирования (обычное старое имя класса «EDIT»).

Логика заключается в том, что пользователь должен заполнить поле редактирования, выбранное приложением. Чтобы было понятнее, какой из них нужно заполнить, я хочу как-то выделить «текущее» поле редактирования. Затем, когда пользователь завершит ввод и попросит приложение продолжить, окно редактирования снова должно стать «обычным».

Идеальный способ - закрасить фон цветом по выбору. Как я мог добиться этого или подобного выбора - может быть, я мог бы заменить кисть, используемую для рисования элемента управления временно? Если это невозможно с редактированием, какие элементы замены доступны в Windows начиная с Win2k?

1 Ответ

5 голосов
/ 18 июня 2009

Вы можете обработать WM_CTLCOLOREDIT уведомление в родительском окне для элементов управления редактирования. Уведомление отправляется, когда элемент управления редактирования собирается получить. В общем, вы должны использовать 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 );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...