Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

13.2.Об обработке команд

Когда пользователь выполняет команду меню приложения или нажимает кнопку на панели инструментов, Windows вызывает обработчик этой команды, который и выполняет необходимые действия. Но, кроме того, уже в классе CCmdTarget, который является родительским для классов CView, CWinApp, CDocument, CWnd и CFrameWnd, определена виртуальная функция

BOOL CCmdTarget::OnCmdMsg(UINT nID, int nCode, void* pExtra,

AFX_CMDHANDLERINFO* pHandlerInfo);

которая вызывается перед выполнением любого «персонального» обработчика этой команды.

Если Вы хотите выполнить какие-либо свои действия до выполнения обработчика команды, перекройте эту функцию в классе окна-рамки или окна вида. Первый параметр этой функции nID является идентификатором команды или управляющего элемента, например, кнопки. Узнать идентификаторы команд можно из ресурса таблица строк (String table на вкладке Resource view), где хранятся не только идентификаторы команд, но и ресурсные строки приложения, подсказки для команд меню и кнопок, отображаемые в строке статуса, а также всплывающие подсказки (tool tips). Этот файл можно редактировать и нужно сохранять. Приложение может иметь произвольное число таблиц строк, но в файле ресурса сохраняется только одна. Если необходимо разработать приложение, использующее несколько языков, то необходимо для каждого языка разработать свою таблицу строк и каждую из них разместить в отдельной DLL.

Заметьте, что идентификаторы тех кнопок на панели инструментов, которые были созданы мастером (например, это кнопка открытия файла), хранятся именно в таблице строк, а идентификаторы кнопок, которые Вы размещаете, например, в диалоговом окне, хранятся в файле Resource.h.

В приложении MessageHandling перекрыта обсуждаемая функция в классе окна-рамки, окне вида и диалоговом окне. Единственное, что делают перекрытые функции – это вывод сообщения в строку статуса.

13.3.Обработка сообщений в рамках системы

Функция BroadcastSystemMessage() посылает сообщение указанным получателям, в качестве которых могут выступать приложения, устанавливаемые драйвера, сетевые драйвера, драйвера устройств системного уровня или любая комбинация этих компонентов системы.

Никаких примеров пока нет – у Вас есть возможность проверить ее работу самостоятельно.

14.Разработка и использование собственных dll

В данном разделе широко использованы материалы из главы 22 работы [1].

Если Вы хотите писать по-настоящему модульное ПО, то Вас заинтересуют динамически подключаемые библиотеки (Dynamic-Link Library – DLL). Может показаться, что программы и так модульные, раз модульны классы С++. Но разница заключается в том, что классы обеспечивают модульность при разработке программы, a DLL — в период ее выполнения. Вместо гигантских ехе-файлов, которые пришлось бы перестраивать и тестировать при любом, даже самом незначительном, изменении кода, гораздо эффективнее создавать компактные DLL-модули и тестировать их по отдельности. Если, например, выделить в DLL какой-нибудь класс С++, то после компиляции и компоновки объем модуля вряд ли превысит 12 Кб. В период выполнения клиентские программы смогут очень быстро загружать и подключать ваши DLL. В частности, в самой Windows поддержка основных функций строится на применении именно DLL.

Сегодня писать DLL стало гораздо легче. В Win32 модель программирования резко упростилась, да и со стороны AppWizard и MFC поддержка DLL существенно расширена и улучшена. В этой главе Вы научитесь писать на C++ DLL-модули, а также клиентские программы, способные их использовать. Вы увидите, как Win32 проецирует DLL на адресные пространства процессов, и узнаете о различиях между обычными DLL MFC-библиотеки (regular DLLs) и DLL-расширениями (extension DLLs).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]