Форум программистов, компьютерный форум CyberForum.ru

Что такое Сабклассирование?(SubclassWindow) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запустить c CD два файла http://www.cyberforum.ru/cpp-beginners/thread498241.html
Я хочу написать простую(в моём понимании) программу. Вот суть программы: она записана на СД, при запуска сидирома она автоматически выполняется. Ей нужно установить Flash-плеер(просто запустить экзешник флеш-плеера), он будет находиться на том же СД с нужными ему файлами, и после установки флеш-плеера, она должна будет запустить флеш-файл, тоесть сам мувик написаный на флеше. По-сути, это...
C++ Идея собирать узлы в кластеры во время простоя машины Я тут поимел такую идею, смысл которой в следующем: Во время простоя машины (по существу после того как машина залочена) обычно это бывает когда человек пошел в туалет на обед, или даже домой, он всегда не выключает машину а лочит ее, так почему бы в это время сделать так чтобы ее ресурсы не простаивали а шли на благо кому нибудь, серверу, главному серверу, другому юзеру который сидит и... http://www.cyberforum.ru/cpp-beginners/thread498218.html
C++ Графики (Нужно в VC++ построить графики...)
Нужно в VC++ построить графики...Двумерные и трехмерные...Не подскажете как?
C++ Удаленное создание пользователя...
Добрый день. Вопрос такой. Есть w2k3. Нужно написать прогу, которая сможет удаленно с рабочего места создать на нем учетную запись, и раздать необходимые права. Наверняка кто-нибудь с этим сталкивался, или хотя бы может подтолкнуть меня в правильном направлении :) Заранее спасибо!
C++ Работа с адресными пространствами http://www.cyberforum.ru/cpp-beginners/thread498023.html
Мене надо передать из одной программы в другую символьный масив. Для этого я посылаю специальное сообщение, один из параметров - адрес символьного массива. Но возникает несоответствие из адресными пространствами. Можно использовать dll, но мне хочеться обойтись без лишних файлов. Возможно ли єто?
C++ Помогите написать лабораторку на С Очень надо, но не знаю как сделать. надо: процесс 1 открывает файл и вызывает процесс 2 процесс 2 записывает в файл текст и прекращает действие процесс 1 читает из файла и выводит на печать. если можно то с краткими комментариями. если нада $$ то в разумных пределах можно, прога то всего ничего. 4evil собака mail.ru для Ольги. подробнее

Показать сообщение отдельно
John Paramol
Сообщений: n/a
31.08.2011, 13:21     Что такое Сабклассирование?(SubclassWindow)
Субклассирование (subclassing) - метод, позволяющий приложению
перехватывать и обрабатывать сообщения, посланные
некоторому окну прежде, чем оно сможет обработать его.
Путем субклассирования окна приложение может дополнять,
изменять или контролировать его поведение.
Хотя это и не рекомендуется, приложение может
субклассировать любое окно, в том числе, принадлежащее
системному классу, такое как Edit или ListBox.
Для примера, приложение может субклассировать
контрол Edit, чтобы не допускать ввода определенных символов.

Приложение субклассирует окно путем замены адреса
изначальной оконной процедуры адресом новой процедуры.
После этого новая процедура получает любые сообщения,
посланные или отложенные окну.
Новая процедура может выполнять три действия:
передавать сообщение изначальной оконной процедуре,
изменять сообщение и передавать изначальной процедуре
или обрабатывать сообщение и не передавать его.
Новая процедура может обрабатывать сообщение до, после,
или же и до и после передачи сообщения изначальной процедуре.

Windows предоставляет два вида субклассирования:
отдельное (instance subclassing)
и глобальное (global subclassing).
При отдельном субклассировании приложение заменяет
оконую процедуру отдельно взятого окна.
Отдельное субклассирование используется для
уже существующих окон.
В глобальном субклассировании приложение заменяет
адрес оконной процедуры в структуре WNDCLASS класса окна.
Все созданные впоследствии окна этого класса имеют
переопределенный адрес оконной процедуры.
На уже существующие окна класса это не повлияет.

Приложение субклассирует экземпляр окна исполюзуя
функцию SetWindowLong с флагом GWL_WNDPROC. Новая
процедура может находиться либо в самом програмном
модуле, либо в DLL. Имя новой процедуры следует
регистрировать в описании EXPORTS
в файле определения модуля (.DEF).

SetWindowLong возвращает адрес изначальной оконной
процедуры. Приложение должно сохранить этот адрес,
для использования в последующих вызовах CallWindowProc
для передачи сообщений изначальной процедуре.
Приложение должно также иметь адрес старой процедуры,
чтобы удалить подкласс окна. Для этого еще раз вызывается
SetWindowLong.

Приложение может субклассировать любое окно в системе.
Однако, оно не должно использовать экстра байты
окна или байты класса окна не зная точно, что эти
байты значат, и как изначальная процедура их использовала.
Даже при этих условиях, приложение не должно их использовать,
пока не завладеет окном. Если приложение использует экстра
байты окна, которым владеет другое приложение, и владелец
изменяет некоторые аспекты этйх байт, субклассированная
процедура может потерпеть неудачу. Поэтому, приложение не
должно субклассировать окно, принадлежащее глобальному
системному классу. Windows владеет системными классами,
и аспекты контролов могут меняться от версии к версии.

Когда приложение субклассирует субклассированное окно,
оно должно впоследствии удалять подклассы в обратном
порядке. В противном случае может произойти неисправимая
системная ошибка.

Для того чтобы глобально субклассировать оконный класс
приложение должно иметь дескриптор окна этого класса.
Дескриптор нужен также для удаления подкласса.
Обычно, чтобы получить дескриптор, приложение создает
невидимое окно этого класса. Получив дескриптор,
приложене вызывает SetClassLong с флагом GCL_WNDPROC,
дескриптором окна и адресом новой оконной процедуры.
SetClassLong возвращает адрес старой процедуры.

Адрес изначальной оконной процедуры используется
также, как при отдельном субклассировании.
Приложение, глобально субклассирующее класс контрола
должно при завершении удалить подкласс, иначе
может произойти неисправимая системная ошибка.

Глобальное субклассирование имеет все те ограничения,
к
 
Текущее время: 16:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru