C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 245 - Использование диапазонов в обработчике команд / MFC шаг за шагом / Visual C++

Шаг 245 - Использование диапазонов в обработчике команд

Макрос ON_COMMAND_RANGE используется для того, чтобы вы могли использовать одну функцию для обработки целого диапазона команд.

ON_COMMAND_RANGE( id1, id2, memberFxn) 
id1		Первый идентификатор диапазона
id2		Последний идентификатор диапазона
memberFxn	Функция вызываемая при выборе пункта меню

Следует учесть, что ClassWizard не умеет работать с диапазонами и нам придется самим писать обработку этого диапазона. Давайте попробуем. Создаем проект на основе AppWizard и именем TestRange. Пусть он будет SDI и сразу жмем Finish. Создаем пункт меню Test с пунктами меню Menu1,Menu2,Menu3.

245.gif (1606 b)

Вопрос: будут ли эти пункты в меню идти по порядку ???? Будут, если мы их создавали сразу подряд. Давайте посмотрим в Resource.h.

#define ID_TEST_MENU1                   32771
#define ID_TEST_MENU2                   32772
#define ID_TEST_MENU3                   32773

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

///////////////////////////////////////////
// CTestRangeView message handlers
void CTestRangeView::onColor(UINT nID)
{

}

Эта функция обычная за исключением того, что в эту функцию будет передан идентификатор объекта(в данном случае пункта меню), который вызвал эту функцию. Ну вот пора написать и макрос обработки.

BEGIN_MESSAGE_MAP(CTestRangeView, CView)
	......
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
	ON_COMMAND_RANGE(ID_TEST_MENU1,ID_TEST_MENU2,OnColor)
END_MESSAGE_MAP()

Изменим и саму функцию для тестирования:

void CTestRangeView::onColor(UINT nID)
{
	CString s;
	s.Format("%d",nID); 
	AfxMessageBox(s);
}

Что Вы увидите при запуске приложения и выбору пунктов меню ??? Будет окно с идентификатором. Смысл такой, мы можем используя диапазоны обработчика команд обрабатывать в одной функции вызовы из разных мест, при этом точно зная кто вызвал эту функцию.


| |
Автор Каев Артем.
[AD]