使用系统菜单
1- HMENU GetSystemMenu( HWND hWnd,BOOL bRevert);
//用来设置系统menu
bRevert-> TRUE 时 会回复系统默认菜单
bRevert-> FALSE 时, 允许在系统菜单上自定义(增加自己的菜单项)
//用来增加菜单项的函数
步骤1. 预定义uIDNewItem ,
#define IDM_SYS_ABOUT 1
#define IDM_SYS_HELP 2
#define IDM_SYS_REMOVE 3
步骤2. 获得系统菜单
HMENU hMenu = GetSystemMenu(hwnd,FALSE); //设为FALSE 代表可以自定义菜单
步骤3. 增加菜单项
函数原型:BOOL AppendMenu( HMENU hMenu,
UINT uFlags,
UINT_PTR uIDNewItem,
LPCTSTR lpNewItem
);
Value | Description |
---|---|
MF_BITMAP | 使用位图作为菜单项。lpNewItem参数包含对位图的句柄。 |
MF_CHECKED | 在菜单项旁边放置一个复选标记。如果应用程序提供了检查标记位图 |
MF_DISABLED | 禁用菜单项,这样它就不能被选中,但是该标记不会对它进行灰色。 |
MF_ENABLED | 使菜单项能够被选中,并从它的灰色状态恢复它。 |
MF_GRAYED | 禁用菜单项,并对其进行灰色操作,以使其不能被选中。 |
MF_MENUBARBREAK | 函数与菜单栏的mfmenu断裂标志相同。对于一个下拉菜单、子菜单或快捷菜单,新列通过垂直线从旧列中分离出来。 |
MF_MENUBREAK | 将项目放置在新行(用于菜单栏)或新列(用于下拉菜单、子菜单或快捷菜单)中,而不需要分离列。 |
MF_OWNERDRAW | |
MF_POPUP | 指定菜单项打开下拉菜单或子菜单。uIDNewItem参数指定下拉菜单或子菜单的句柄。这个标志用于在菜单栏中添加一个菜单名,或者一个菜单项,它会打开一个下拉菜单、子菜单或快捷菜单的子菜单。 |
MF_SEPARATOR | 画一条水平线。此标记仅在下拉菜单、子菜单或快捷菜单中使用。这条线不能被灰色、禁用或突出显示。lpNewItem和uIDNewItem参数被忽略。 |
MF_STRING | Specifies that the menu item is a text string; the lpNewItem parameter is a pointer to the string. |
MF_UNCHECKED | 不要在项目旁边放置一个复选标记(默认)。如果应用程序提供了检查标记位图(见SetMenuItemBitmaps),这个标记将显示在菜单项旁边的清晰的位图。 |
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, MF_STRING, IDM_SYS_ABOUT, TEXT("About"));
AppendMenu(hMenu, MF_STRING, IDM_SYS_HELP, TEXT("Help..."));
AppendMenu(hMenu, MF_STRING, IDM_SYS_REMOVE, TEXT("Remove"));
case WM_SYSCOMMAND:
switch (LOWORD(wParam))
{
case IDM_SYS_ABOUT:
MessageBox(hwnd, TEXT("This is a About Menu!"), TEXT("About"), MB_OKCANCEL);
return 0;
case IDM_SYS_HELP:
MessageBox(hwnd, TEXT("This Module has not implemented yet!"), TEXT("Help"), MB_ICONEXCLAMATION);
return 0;
case IDM_SYS_REMOVE:
GetSystemMenu(hwnd, TRUE);
return 0;
}
break;//结尾要用break,否则程序无法正常退出
==结尾要用break,否则程序无法正常退出==