Шаг 43 - Наши пункты в системное меню

Создание проекта

Воспользуемся проектом из прошлого шага. Единственное, что необходимо - это настроить диалоговое окно. При установке диалогового окна меню может и не быть, так же оно может быть, но значка в левом углу не будет. Сделайте, пожалуйста, как на картинке внизу.

43_1.gif (8506 b)

Создаем код

Объявляем идентификатор меню.

.........
#pragma comment(lib,"shell32.lib") // подключили LIB файл.
#define IDM_MYMENU 102 // идентификатор нашего меню.
class CTestDlg : public CDialog // класс диалогового окна.
.........

Для настройки системного меню используется OnInitDialog(). Объявим ее.

class CTestDlg : public CDialog	// класс диалогового окна
{
public:
........
void OnSend(); // функция реакции
BOOL OnInitDialog(); // функция настроки
protected:
........
};

И реализуем.

BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // метод предка
CMenu* pSysMenu = GetSystemMenu(FALSE); // получить системное меню
if (pSysMenu != NULL) // если удалось все таки
{
pSysMenu->AppendMenu(MF_SEPARATOR); // добавить разделитель
pSysMenu->AppendMenu(MF_STRING, IDM_MYMENU, "MyMenu"); // добавить наш пункт
}
return TRUE;
}

Вот так работает наша программа.

43_2.gif (4554 b)

Описание

Для работы с меню необходимо создать объект типа CMenu. Функция GetSystemMenu получает копию системного меню, с которым можно дальше работать. Получив копию можно добавлять в меню свои пункты. AppendMenu добавляет пункт меню. Здесь указывается тип пункта меню, идентификатор, и строка в меню. Естественно для разных типов меню набор разный. Первым делом я добавляю строку разделитель. Поэтому кроме типа пункта меню в остальном нет необходимости.

Шпаргалка

Создайте экземпляр пункта меню.

CMenu* pSysMenu = GetSystemMenu(FALSE);		// получить системное меню

Добавьте пункты.

pSysMenu->AppendMenu(MF_SEPARATOR);		// добавить разделитель

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.