首页 > 代码库 > Win32 Windows编程 八

Win32 Windows编程 八

一、系统菜单

1 执行从系统提供的窗口命令,例如最大化、关闭等命令。本质上和普通菜单一样,所以我们也可以在程序中使用这个菜单

2 系统菜单的使用

2.1 获取系统菜单

GetSystemMenu

HMENU GetSystemMenu(

HWND hWnd, //要获取的窗口句柄

BOOL bRevert; //获取重置标识

);

bRevert: TRUE 重置 FALSE 不重置

当为TRUE时 会将菜单重置成默认状态,并返回菜单句柄,为false菜单项不重置, 获取当前系统菜单的状态

2.2 修改系统菜单, 例如增加、 删除 

AppendMenu

InsertMenu

比AppendMenu增加了一个插入菜单项的位置

RemoveMenu

删除菜单项

2.3 系统菜单的响应命令

系统菜单的响应命令,实在WM_SYSCOMMAND 中

WPARAm - LOWORD( wParam )为增加菜单的ID

二、右键菜单

1 当在窗口点击右键时,弹出的菜单。

2 右键菜单的使用

2.1 创建菜单

CreatePopMenu

2.2 菜单增加

AppendMenu / InsertMenu

2.3 菜单的显示

TrackPopupMenu

BOOL TrackPopupMenu(
  HMENU hMenu,         // handle to shortcut menu
  UINT uFlags,         // options
  int x,               // horizontal position
  int y,               // vertical position
  int nReserved,       // reserved, must be zero
  HWND hWnd,           // handle to owner window
  CONST RECT *prcRect  // ignored
);


2.4 菜单的命令处理

WM_COMMAND 

2.5 使用右键菜单的位置

2.5.1 WM_RBUTTONUP中添加菜单的创建和显示

右键消息坐标转换成屏幕坐标使用 - ClientToScreen

2.5.2 WM_CONTEXTMENU 

用于显示右键的菜单的消息

WPARAM  - 右键抬起时对应的窗口句柄

LPARAM  - 右键抬起时的屏幕坐标

2.5.3 WM_RBUTTONUP 和 WM_CONTEXTMENU对比

1) 坐标系不同,WM_RBUTTONUP 客户区坐标 WM_CONTEXTMENU 屏幕坐标

2)WM_RBUTTONUP 先于 WM_CONTEXTMENU执行