Дополнения к 43 шагу.

Хотелось бы немного дополнить Ваш шаг 43.

На данном этапе Вы показали как можно добавить свой пункт в системное меню, но без указания как подключить к этому пункту меню свой код.

Ниже я привел некоторые дополнения, чтобы при выборе добавленного пункта выполнялся наш код (в моем случае просто выдается сообщение).

Сначала добавим в класс CTestDlg функцию OnSysCommand. Эта функция берет свое начало в классе CWnd. Параметр nID - идентификатор выбранного пункта меню.

class CTestDlg : public CDialog
{
 public:
        . . .
        void OnSysCommand(UINT nID, LPARAM lParam);
        . . .
}
Затем дополняем "карту сообщений" событием ON_WM_SYSCOMMAND()
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
        . . .
        ON_WM_SYSCOMMAND()
END_MESSAGE_MAP()
И последнее, что осталось описать - собственно наш код для данного события, который выполняется при условии, что мы выбрали именно добавленный пункт меню.
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if (nID == IDM_MYMENU)
        {
         AfxMessageBox("You clicked MyMenu !");
        }
        else
        {
                CDialog::OnSysCommand(nID, lParam);
        }
}
В итоге все получается достаточно просто и даже работает (во всяком случае у меня).

Прислал Valeri Khromov.


Автор : Каев Артем.