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 руб./мес


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




 247 - Использование каскадных меню / MFC шаг за шагом / Visual C++

Шаг 247 - Использование каскадных меню

Каскадное меню - это меню, при выборе которого выпадают дополнительные пункты меню.

247_1.gif (2999 b)

Создаем новый проект с помощью MFC App Wizard с именем Test Cascade как SDI и сразу жмем Finish. Итак, мы хотим добавить к меню View каскадное меню. Для этого в меню View создадим пункт меню Test и привяжем к нему функцию обработки.

void CMainFrame::OnViewTest() 
{
	// TODO: Add your command handler code here
}

Дальше нам надо получить указатель на пункт меню View в классе меню CMenu, как мы делали ранее.

void CMainFrame::OnViewTest() 
{
	CMenu* cm;
	CMenu* cmSub;
	cm=GetMenu();
	ASSERT (cm != NULL);
	cmSub=cm->GetSubMenu(2);
	ASSERT (cmSub !=NULL);
}

Теперь будем добавлять каскадное меню. Первое - это надо создать идентификаторы в ресурсах, так как пункты меню связаны с идентификаторами.

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Test Cascade.rc
//
......
#define ID_VIEW_TEST                    32772

#define ID_POPUP1                    32774
#define ID_POPUP2                    32775

// Next default values for new objects
......

Теперь нам нужно объявить указатель в классе на класс CMenu:

class CMainFrame : public CFrameWnd
{
......

// Implementation
public:
	CMenu* cmNew;
......

Дальше по выбору пункта меню Test создать этот класс и добавить в него пункты меню. После чего созданный класс меню добавить к существующему меню.

void CMainFrame::OnViewTest() 
{
	CMenu* cm;
	CMenu* cmSub;
	cm=GetMenu();
	ASSERT (cm != NULL);
	cmSub=cm->GetSubMenu(2);
	ASSERT (cmSub !=NULL);
	cmNew = new CMenu;
	cmNew->CreatePopupMenu();
	cmNew->AppendMenu(MF_STRING,ID_POPUP1,"Popup1");
	cmNew->AppendMenu(MF_STRING,ID_POPUP2,"Popup2");
	cmSub->AppendMenu(MF_STRING | MF_POPUP,(UINT)cmNew->m_hMenu,"Popup");
}

Обратите внимание на последнюю строчку. Мы добавляем к нашему меню указатель на новое меню, но со стилем MF_POPUP. На рисунке ниже приведен результат работы программы при выборе меню Test.

247_2.gif (2455 b)

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

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	cmNew=NULL;
}

CMainFrame::~CMainFrame()
{
	if (cmNew!=NULL) delete cmNew;
}

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