如何使程序最小化到系统托盘

    xiaoxiao2026-08-04  7

    最近自己利用activemovie制作了一个简单的音乐播放器,希望像qq,千千静听,暴风影音那样程序最小化时在系统托盘中显示而不是在任务栏中。如下:

    1.在基于对话框的程序的头文件中添加成员变量 NOTIFYICODATA m_nid

    2.自定义消息函数OnShowTask

     1)首先在头文件中定义 #define WM_SHOWTASK WM_USER+1

     2)在头文件映射中在添加 afx_msg LRESULT OnShowTask(WPARAMwParam,LPARAM lParam)

     3)在源文件中的消息映射队列中添加ON_MESSAGE(WM_SHOWTASK,OnShowTask)

     4)在原文件中添加自定义消息函数定义:

       LRESULTCMediaPlayerDialog::OnShowTask(WPARAM wParam,LPARAM lParam)

     {

        if(wParam!= IDR_MAINFRAME)      return 1;    switch(lParam)     {     caseWM_RBUTTONUP:                                       // 右键起来时弹出菜单      {                LPPOINTlpoint = new tagPOINT;        ::GetCursorPos(lpoint);                   // 得到鼠标位置        CMenumenu;        menu.CreatePopupMenu();                   // 声明一个弹出式菜单        menu.AppendMenu(MF_STRING,WM_DESTROY, "退出(&X)");        menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x ,lpoint->y, this);        HMENU hmenu =menu.Detach();        menu.DestroyMenu();        deletelpoint;       }      break;     caseWM_LBUTTONDBLCLK:                                // 双击左键的处理      {        this->ShowWindow(SW_SHOWNORMAL);        // 显示主窗口       }      break;     }    return 0;  

     }

    3.在程序的InitDialog函数中添加如下代码:

    //---------------------------托盘显示初始化---------------------------------//      m_nid.cbSize  =(DWORD)sizeof(NOTIFYICONDATA);      m_nid.hWnd    =this->m_hWnd;      m_nid.uID    = IDR_MAINFRAME;      m_nid.uFlags  = NIF_ICON | NIF_MESSAGE | NIF_TIP;      m_nid.uCallbackMessage =WM_SHOWTASK;            // 自定义的消息名称      m_nid.hIcon   =LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));      strcpy(m_nid.szTip,"自制播放器");               // 信息提示条为"服务器程序"      Shell_NotifyIcon(NIM_ADD,&m_nid);               // 在托盘区添加图标

    4.重载对话框程序的WM_SIZE消息

       voidCMediaPlayerDlg::OnSize(UINT nType, int cx, int cy) {  CDialog::OnSize(nType, cx, cy);    // TODO: Add your message handler code here  if(nType ==SIZE_MINIMIZED)      {       ShowWindow(SW_HIDE); //当最小化时,隐藏主窗口                  }   

    }

    5.重载WM_DESTROY消息,关闭程序时关闭托盘上的程序图标

    void CMediaPlayerDlg::OnDestroy() {  CDialog::OnDestroy();    // TODO: Add your message handler code here

     // 系统关闭时在托盘区删除图标  Shell_NotifyIcon(NIM_DELETE,&m_nid);               // return CDialog::DestroyWindow();   }

    转载请注明原文地址: https://ju.6miu.com/read-1310827.html
    最新回复(0)