在OnInitDialog()函数里,mfc对系统菜单进行了处理,要想对你的程序增加属于你自己的系统菜单,可在其基础上进行修改,最后在进行响应.

具体步骤如下:

(1)定义属于自己的系统菜单ID,此ID必须<0xF000,这样才不会跟系统使用的ID产生冲突。

#define IDM_SYS_SELF 1

(2)在OnInitDialog里面增加如下红色内容:

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

ASSERT(IDM_SYS_SELF < 0xF000);


CMenu* pSysMenu = GetSystemMenu(FALSE); //取系统菜单

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty()) //About不为空

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

pSysMenu->AppendMenu(MF_SEPARATOR); //加一个分割线

pSysMenu->AppendMenu(MF_STRING, IDM_SYS_SELF, L" By Yourself");

}

(3)最后对自定义的菜单进行响应,可以PreTranslateMessage()中进行:

BOOL CPopupMenuPosDemoDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if (pMsg->message == WM_SYSCOMMAND)

{

switch (LOWORD(pMsg->wParam))//菜单ID

{

case IDM_SYS_SELF:

MessageBox(L"MY SYSTEM ID");

break;

}

}

return CDialogEx::PreTranslateMessage(pMsg);

}