替换系统弹出的菜单

来源:互联网 发布:php base64解码函数 编辑:程序博客网 时间:2024/05/20 13:05
 

很多时候,开发的应用程序需要替换系统弹出的菜单,显示自定义的菜单。

其实当用户在任务栏应用程序图标上点击右键时,系统会发送一个消息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;

     }

    

}

 

原创粉丝点击