Cтраница 3
Разумеется, типичная Windows-программа не пойдет далеко, если не назначить оконную процедуру в поле IpfnWndProc. He важно, какой путь для этого вы изберете, важно лишь, чтобы это назначение было как-нибудь организовано. Прием, которым вы пользуетесь, совсем не так значителен, как сам результат. [31]
В Закончив, программа FileBox тщательно убрала за собой, поместив старую оконную процедуру обратно туда, где она ее обнаружила. [32]
В частности, вы могли заметить, что StyleChild имеет свою собственную оконную процедуру и свой собственный курсор. Вы увидите, что курсор меняет свой внешний вид со стрелки на 1-образный. [33]
Третий шаг - беглый взгляд на то, как WINDOWSX обращается с оконной процедурой, обрабатывающей сообщения по умолчанию. [34]
Если окно было создано текущим потоком, то функция для обработки извещения вызывает оконную процедуру и не завершается, пока оно не будет обработано. Если же окно было создано другим потоком, то послав извещение в оконную процедуру, функция завершает свою работу. [35]
Точно так же, каг диалоговая панель или окно, катогый элемент управления имеет оконную процедуру, определяющую его поведение. [36]
Этот процесс продолжается до тех пор, пока команда не будет выполнена или отправлена оконной процедуре, действующей по умолчанию. [37]
Второй макрос называется FORWARD WM XXX и может быть использован для передачи сообщения обратно в оконную процедуру, действующую по умолчанию. [38]
Нет нужды говорить, что миссия CallWindowProc заключается в том, чтобы передать сообщение в исходную оконную процедуру. Это становится возможным потому, что вы специально передаете адрес исходной процедуры в качестве первого параметра. [39]
Программа FileBox обработала определенные сообщения, которые сочла нужными, и передала остальные непосредственно в старую оконную процедуру. [40]
Если рассмотреть поставляемые исходные тексты, то видно, что это единственная функция ( не считая оконной процедуры по умолчанию), которая вызывается в оконной процедуре. Это означает, что именно она занимается поиском соответствующих обработчиков сообщений. [41]
Поскольку все еще существует множество старых программ, важно показать вам, как следует обращаться с оконными процедурами, которые состоят из единственного длинного оператора switch. Решение получается в форме диалоговых процедур, которые являются для диалоговых панелей тем же. По различным причинам ( которые не стоит обсуждать именно сейчас) в этой книге вы не увидите, чтобы WINDOWSX. [42]
Вы уже знаете, что SendMessage доставляет сообщение непосредственно конкретной WndProc, которой в данном случае является оконная процедура перечня. [43]
Создание подклассов позволяет вам изменять поведение элементов управления, временно принимая на себя ответственность за них вместо оконной процедуры. [44]
Последняя функция цикла - DispatchMessage - берет данные о сообщении из структуры msg и передает их в соответствующую оконную процедуру для обработки. После того как сообщение передано, снова вызывается функция GetMessage, чтобы взять из очереди следующее сообщение, если таковое имеется. [45]