基於Duilib的win32程序實現最小化到托盤

最近在學習使用Duilib,這個庫實現PC程序的界面確實很方便。Duilib中的demo程序全是點擊關閉按鈕程序就關閉了,因此這裏我實現了一個點擊關閉按鈕後程序最小化到托盤的效果。以及常規的,鼠標左鍵點擊托盤裏的程序圖標後程序正常顯示。右鍵點擊後出現退出菜單,點擊退出按鈕後程序正常退出。
下面是關鍵部分源碼:學習

  • 包含頭文件和自定義消息
#include <ShellAPI.h>
#define WM_SHOWTASK WM_USER+101 
#define WM_ONCLOSE WM_USER+102
  • 處理關閉按鈕點擊事件,增長最小化到托盤功能
memset(&m_nid,0,sizeof(NOTIFYICONDATA));
    m_nid.cbSize = sizeof(NOTIFYICONDATA);
    m_nid.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL));
    m_nid.hWnd = m_hWnd;
    lstrcpy(m_nid.szTip, _T("Duilib程序"));
    m_nid.uCallbackMessage = WM_SHOWTASK;
    m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    Shell_NotifyIcon(NIM_ADD, &m_nid);
    ShowWindow(SW_HIDE);
  • 自定義HandleCustomMessage或HandleMessage處理鼠標點擊托盤圖標的響應
//若是在圖標中單擊左鍵則還原
    if( lParam == WM_LBUTTONDOWN )
    {             
        Shell_NotifyIcon(NIM_DELETE, &m_nid);//刪除托盤圖標
        ShowWindow(SW_SHOWNORMAL);//顯示主窗口
    }
    //若是在圖標中單擊右鍵則彈出聲明式菜單
    if( lParam == WM_RBUTTONDOWN )
    {             
        //獲取鼠標座標  
        POINT pt; GetCursorPos(&pt);  
        SetForegroundWindow(m_hWnd); //右擊後點別地能夠清除「右擊出來的菜單」

        HMENU hMenu; //托盤菜單    win32程序使用的是HMENU,若是是MFC程序可使用CMenu
        hMenu = CreatePopupMenu();//生成托盤菜單   
        AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("退出"));  

        int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd,  NULL);  
        if(cmd == WM_ONCLOSE)   
        {
            //退出程序
            m_nid.hIcon = NULL;
            Shell_NotifyIcon(NIM_DELETE, &m_nid);
            ::PostQuitMessage(0);
        }
    }
相關文章
相關標籤/搜索