很多时候,开发的应用程序需要替换系统弹出的菜单,显示自定义的菜单。
其实当用户在任务栏应用程序图标上点击右键时,系统会发送一个消息0x0313,Microsoft的开发文档里没有说明这个消息。你可以在你的应用程序中处理这个消息,然后显示自己的菜单。
如何在代码中来实现呢?
一.定义这个消息(因为MS没有定义这个消息)
// This is an undocumented window message that is send when the user right-clicks the taskbar buttons.
const UINT WM_TASKBARRCLICK = 0x0313;
二.在消息处理函数中处理这个消息
INT_PTR CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_TASKBARRCLICK:
{
// 显示自定义菜单
POINT pt;
GetCursorPos(&pt);
HMENU hMenu = LoadMenu(s_singleInstance->m_hInstance, MAKEINTRESOURCE(IDR_CONTEXT_MENU));
if ( hMenu != NULL )
{
hMenu = GetSubMenu(hMenu, 0);
SetForegroundWindow(s_singleInstance->m_hwnd);
TrackPopupMenu(hMenu,
TPM_BOTTOMALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
s_singleInstance->m_hwnd,
NULL);
DestroyMenu(hMenu);
}
}
return (INT_PTR)TRUE;
}
…
}