很多時候,開發的應用程序需要替換系統彈出的菜單,顯示自定義的菜單。
其實當用戶在任務欄應用程序圖標上點擊右鍵時,系統會發送一個消息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;
}
…
}