处理WM_CONTEXTMENU消息

【勇芳软件工作室】汉化HomePreviousNext

当应用程序的窗口过程将WM_RBUTTONUPWM_NCRBUTTONUP消息传递给DefWindowProc功能时,将生成WM_CONTEXTMENU消息。应用程序可以处理此消息以显示适合其屏幕特定部分的快捷菜单。如果应用程序不显示快捷菜单,则应将消息传递给DefWindowProc以进行默认处理。

以下是WM_CONTEXTMENU消息处理的示例,因为它可能出现在应用程序的窗口过程中。【lParam的】参数的低阶和高位字指定鼠标右键释放时的屏幕坐标。如果应用程序定义的OnContextMenu函数显示上下文菜单,则返回TRUE,否则返回FALSE。

case WM_CONTEXTMENU:

如果(!OnContextMenu(HWND,LOWORD(IPARAM),HIWORD(IPARAM)))nl

return DefWindowProc(hwnd, uMsg, wParam, lParam);

break;

如果指定的鼠标位置在窗口的客户区内,以下应用程序定义的OnContextMenu函数将显示快捷菜单。更复杂的功能可能会显示几个不同菜单中的一个,具体取决于指定的客户区域的哪一部分。要实际显示快捷菜单,此示例调用名为DisplayContextMenu的应用程序定义函数。有关此函数的说明,请参阅显示快捷菜单.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y)

{

RECT rc; //窗口的客户区

POINT pt = { x, y }; //鼠标点击的位置

//获取客户区域的边界矩形。

GetClientRect(hwnd, &rc);

//将鼠标位置转换为客户端坐标。

ScreenToClient(hwnd, &pt);

//如果位置在客户区域,则显示a

//快捷菜单。

if(PtInRect(& rc,pt)){

ClientToScreen(hwnd, &pt);

DisplayContextMenu(hwnd, pt);

return TRUE;

}

//如果没有菜单显示,返回FALSE。

return FALSE;

}