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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

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

2022-10-29 29
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).


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

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

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

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



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

0.009 с.