Окт 16

Улучшенное приложение для просмотра текстовых файлов

При изучении полос прокрутки и вывода текста было создано приложение TextViewer, предназначенное для чтения и вывода на экран текстового файла. В том варианте приложения сообщения мыши не учитывались, но при работе с полосами прокрутки Windows берет на себя первичную обработку этих сообщений. В результате этой обработки Windows направляет окну сообщения с префиксом SB_. Именно эти сообщения и обрабатывала оконная процедура приложения.
Теперь, вооруженные новыми знаниями, мы хотели бы усовершенствовать приложение TextViewer, добавив в него обработку колесика мыши, а также возможность для пользователя общаться с программой через клавиатурный интерфейс. Второе требование означает, что все операции, выполняемые мышью, должны быть продублированы на клавиатуре.
Есть два пути решения второй задачи. Обрабатывая сообщение WM_KEYDOWN, можно было бы просто продублировать полностью код, отвечающий за обработку сообщений WM_VSCROLL и WM_HSCROLL. Но это некрасиво и непрактично с точки зрения дальнейшего сопровождения программы. Второй подход заключается в том, что при появлении аппаратного сообщение клавиатуры, которое дублирует действие мыши, следует вызывать тот код, который уже был написан для обработки сообщений, начинающихся префиксом SB_. Фактически, это означает, что оконная процедура должна послать сама себе сообщение SB_.
Win32 API имеет несколько функций для отправки сообщений. В данной ситуации лучше использовать функцию SendMessage, имеющую следующий прототип:
LRESULT SendMessage(HWND hWnd, UINT Msg. WPARAM wParam. LPARAM IParam);
Параметры функции имеют тот же смысл, что и параметры, передаваемые в оконную процедуру. Когда вызывается функция SendMessage, Windows вызывает оконную процедуру с дескриптором окна hWnd, передавая ей эти четыре параметра. После того как оконная процедура заканчивает обработку сообщения, Windows передает управление следующей за вызовом SendMessage инструкции.