替換系統彈出的菜單

 

很多時候,開發的應用程序需要替換系統彈出的菜單,顯示自定義的菜單。

其實當用戶在任務欄應用程序圖標上點擊右鍵時,系統會發送一個消息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;

     }

     …

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章