История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

MFC. Настройка очереди сообщений для обработки сообщений меню.

2022-10-29 52
MFC. Настройка очереди сообщений для обработки сообщений меню. 0.00 из 5.00 0 оценок
Заказать работу

Вверх
Содержание
Поиск

Для указания сообщений, которые должно обрабатывать приложение, используется макрокоманда включения. Это реализуется описанием (макрокоманда DECLARE_MESSAGE_MAP) очереди сообщений (карты подключения) окна вида

BEGIN_MESSAGE_MAP(моеОКНО, CFrameWnd)

Список макрокоманд включения

END_MESSAGE_MAP().

Макрокоманда включения формируется по правилам

ON_< ИдентификаторСообщения >([СписокПараметров]).

Например, для сообщения LBUTTONDOWN получим ИдентификаторСообщения WM_LBUTTONDOWN, ИмяОбработчика OnLButtonDown, макрокоманда включения ON_WM_LBUTTONDOWN(), прототип функции-обработчика

afx_msg void OnLButtonDown(UINT flags, CPoint loc).

Однако для сообщения COMMAND ИдентификаторСообщения WM_COMMAND, ИмяОбработчика OnCommand, макрокоманда включения ON_COMMAND (ИмяРесурса, ИмяОбработчика)!

Таким образом, для того, чтобы конкретное окно (например, описанное в классе моеОКНО) реагировало на сообщения, необходимо для каждого из сообщений:

- описать в классе окна соответствующий обработчик;

- включить чувствительность окна к этому типу сообщений.

MFC. Основные методы класса CDialog.

1) CDialog - Конструирует объект CDialog

class MY_DIALOG: public CDialog

{

public:

MY_DIALOG (char *DialogName, CWnd *Owner): CDialog(DialogName, Owner) { };

//<afx_msg прототипы обработчиков сообщений>

DECLARE_MESSAGE_MAP()

};

2) Create - Инициализирует объект CDialog

3) DoModal - Вызывает модальное диалоговое окно и завершает работу после его закрытия

MY_DIALOG TheDialog((LPTSTR) IDD_DIALOG1 /*"SampleDialog"*/, this);

TheDialog.DoModal();

4) EndDialog - Закрывает модальное диалоговое окно

TheDialog.EndDialog();

5) OnInitDialog - Переопределяется для проведения дополнительной инициализации диалогового окна

MFC. Основные этапы разработки и управления диалоговым окном.

1) Создать файл описания ресурсов (или просто файл ресурсов *.rc). Для этого выполнить команду ГМ-Project-AddToProject-New-Files, выбрать тип - Resource Script, а в качестве имени файла задать <ИмяПриложения>. Автоматически к проекту будет добавлен Resource Script файл с именем <ИмяПриложения>.rc>. Подключить файл описания ресурсов к приложению посредством команды #include "resource.h".

2) Создать новый ресурс - диалоговое окно. Добавить ресурс к проекту командой ГМ-Insert-Resource-Dialog.

3) Отредактировать внешний вид (облик) окна. Настроить окно (свойства окна), например, сохранить стиль (Style) Popup и (Border) Dialog Frame (или Resizing!).

4) Описать пользовательский класс MY_DIALOG для создания экземпляров пользовательских диалоговых окон. Для этого в тексте каркаса приложения описать класс MY_DIALOG, обслуживающий диалоговое окно <ID_имя_диалогового_окна>, как производный от библиотечного класса MFC - CDialog. Описать конструктор MY_DIALOG (char *DialogName, CWnd *Owner), где DialogName - ID-имя диалогового окна, Owner - его владелец (здесь, как правило, текущее окно, т.е. this).

class MY_DIALOG: public CDialog

{

public:

MY_DIALOG (char *DialogName, CWnd *Owner): CDialog(DialogName, Owner) { };

//<afx_msg прототипы обработчиков сообщений>

DECLARE_MESSAGE_MAP()

};

BEGIN_MESSAGE_MAP (MY_DIALOG, CDialog)

//<указание типов обрабатываемых сообщений и имен их обработчиков>

END_MESSAGE_MAP()

5) Подключить диалоговое окно к приложению. Диалоговое окно создается и запускается следующим образом:

MY_DIALOG TheDialog((LPTSTR) IDD_DIALOG1, this);

TheDialog.DoModal();

MFC. Описание пользовательского класса для работы с диалоговым окном.

Описать пользовательский класс MY_DIALOG для создания экземпляров пользовательских диалоговых окон можно следующим образом.

class MY_DIALOG: public CDialog

{

public:

MY_DIALOG (char *DialogName, CWnd *Owner): CDialog(DialogName, Owner) { };

DECLARE_MESSAGE_MAP()

};

BEGIN_MESSAGE_MAP (MY_DIALOG, CDialog)

//<указание типов обрабатываемых сообщений и имен их обработчиков>

END_MESSAGE_MAP()

MY_DIALOG - наследуемый пользовательский класс от класса CDialog, обслуживающий диалоговое окно <ID_имя_диалогового_окна>, как производный от библиотечного класса MFC - CDialog. MY_DIALOG (char *DialogName, CWnd *Owner) - конструктор класса MY_DIALOG, где DialogName - ID-имя диалогового окна, Owner - его владелец (здесь, как правило, текущее окно, т.е. this).

 

 

MFC. Пример описания пользовательского класса для работы с диалоговым окном.

Описать пользовательский класс MY_DIALOG для создания экземпляров пользовательских диалоговых окон можно следующим образом.

class MY_DIALOG: public CDialog

{

public:

MY_DIALOG (char *DialogName, CWnd *Owner): CDialog(DialogName, Owner) { };

DECLARE_MESSAGE_MAP()

};

BEGIN_MESSAGE_MAP (MY_DIALOG, CDialog)

//<указание типов обрабатываемых сообщений и имен их обработчиков>

END_MESSAGE_MAP()

MY_DIALOG - наследуемый пользовательский класс от класса CDialog, обслуживающий диалоговое окно <ID_имя_диалогового_окна>, как производный от библиотечного класса MFC - CDialog. MY_DIALOG (char *DialogName, CWnd *Owner) - конструктор класса MY_DIALOG, где DialogName - ID-имя диалогового окна, Owner - его владелец (здесь, как правило, текущее окно, т.е. this).


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.