|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Instance Subclassing
An application subclasses an instance of a window by using the SetWindowLong function. The application passes the GWL_WNDPROC flag, the handle of the window to subclass, and the address of the subclass procedure to SetWindowLong. The subclass procedure can reside in either the application's module or a dynamic-link library (DLL). An application must list the name of the subclass procedure in the EXPORTS statement of the application's or DLL's module-definition (.DEF) file.
SetWindowLong returns the address of the window's original window procedure. The application must save the address, using it in subsequent calls to the CallWindowProc function, to pass intercepted messages to the original window procedure. The application must also have the original window procedure address to remove the subclass from the window. To remove the subclass, the application calls SetWindowLong again, passing the address of the original window procedure with the GWL_WNDPROC flag and the handle of the window.
An application can subclass any window in the system; however, when subclassing a window it does not own, the application must ensure that the subclass procedure does not destroy the original behavior of the window. Because the application does not control the window, it must not depend on information about the window that the owner might change in the future. An application should not use the extra window bytes or the class bytes for a window without knowing exactly what the bytes mean and how the original window procedure uses them. Even so, the application should not use them unless it owns the window. If the application uses the extra window bytes of a window that another application owns and the owner changes some aspect of the extra bytes, the subclass procedure may fail. For this reason, an application should not subclass a window that belongs to a system global control class. Windows owns the system global classes, and aspects of the controls might change from one version of Windows to the next. If the application must subclass a window that belongs to a system global class, the developer may need to update the application when a new version of Windows is released.
Because instance subclassing occurs after a window is created, the application subclassing the window cannot add any extra bytes to the window. Applications that subclass a window should use the window's property list to store any data needed for an instance of the subclassed window. For more information, see Window Properties. When an application subclasses a subclassed window, it must remove the subclasses in the reverse order they were performed. If the removal order is not reversed, an unrecoverable system error may occur.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Пример Subclassing
Прикладные подклассы пример окна используя функцию SetWindowLong. Приложение передает флаг GWL_WNDPROC, ручка окна в подкласс, и адрес процедуры подкласса на SetWindowLong. Процедура подкласса может находиться в или прикладной модуль или динамическая связь библиотеки (DLL). Приложение должно указать имя процедуры подкласса в утверждении ЭКСПОРТА приложение или DLL's модульное-определение (.ОПРЕДЕЛЕННЫЙ) файл.
SetWindowLong ВОЗВРАЩАЕТ адрес процедуры оригинального окна окна. Приложение должно сохранить адрес, использовавший это на последующих вызовах в функцию CallWindowProc, чтобы передавать перехваченные сообщения в оригинальную процедуру окна. Приложение должно также иметь адрес процедуры оригинального окна, чтобы удалять подкласс из окна. Для того, чтобы удалять подкласс, прикладные вызовы SetWindowLong снова, передающие адрес оригинальной процедуры окна с флагом GWL_WNDPROC и ручка окна.
Приложение может подкласс любое окно в системе; тем не менее, когда subclassing окно это не принадлежит, приложение должно проверить, что процедура подкласса не уничтожает оригинальное поведение окна. Поскольку приложение не управляет окном, это не должно зависеть от информации об окне, которое владелец мог изменить в будущем. Приложение не должно использовать дополнительные байты окна или байты класса для окна не зная точно, который байты означают и как оригинальная процедура окна использует ее. Все-таки, приложение не должно использовать их если это не обладает окном. Если приложение использует дополнительные байты окна окна, что другое приложение обладает и владелец изменяет некоторый аспект дополнительных байтов, процедура подкласса может потерпеть неудачу. По этой причине, приложение не должно подкласс окно, которое принадлежит системному глобальному управляющему классу. Windows обладает системными глобальными классами, и аспекты элементов управления могли заменить с одной версии Windows на другое. Если приложение должно подкласс окно, которое принадлежит системному глобальному классу, разработчик возможно нужно корректировать приложение когда новая версия Windows выпущена.
Поскольку пример subclassing происходит после того, как окно будет создано, прикладное subclassing окно не может добавить любые дополнительные байты к окну. Приложения, что подкласс окно должно использовать список свойств окна, чтобы загружать любые данные необходимые для примера окна subclassed. Более подробно, смотри Свойства Окна. Когда прикладные подклассы окно subclassed, это должно удалить подклассы в обратном порядке, который они были выполнены. Если порядок удаления не возобновлен, неисправимая системная ошибка может произойти.
|
|
|
|
| |