咨询邮箱 咨询邮箱: 咨询热线 咨询热线: 微博 微信
您的位置:主页 > 娱乐 > >
MFC使用NotifyIcon托盘应用程序
发表日期:2018-05-16    文章编辑:admin    浏览次数:

         通告区域说得中肯图标是某些工艺流程的快捷方式。,这些跑过在计算者底色运转。,这些工艺流程缺席本人的用户界面。,比如,人们经用QQ和YY用托盘图标。。NotifyIcon 类陈设了构成此职务的方式。。在MFC中发生NOTIFYICON托盘是复杂的,人们只需求翻开非常钟螺纹来处置托盘。,嗯,人们的详细密码。

1。率先,人们排列了非常钟新的MFC顺序,在对话框DLG类中添加NoTyyICONDATA典型目的。

NOTIFYICONDATA m_nid;

2。在头文档中界说自界说音讯

#define WM_SYSTEMTRAY WM_USER+1001

三。在DLG类中界说非常钟螺纹职务

static DWORD WINAPI NotifyIconProc(LPVOID LpParameter);,某些人会问为什么螺纹职务是动态的。让人们考虑一下。!

4。在DLG的OnInItTalk()密码中输出以下密码。

HICON m_hicon = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_STATEICON_4));//教育非常钟托盘图标
 m_nid.cbSize = sizeof( NOTIFYICONDATA );
 m_nid.hWnd = m_hWnd;                          指定的窗口句柄
 m_nid.uID = IDR_MAINFRAME;                    
 m_nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;  指定的无效构件
 m_nid.uCallbackMessage = WM_SYSTEMTRAY;       //自界说音讯
 m_nid.hIcon = m_hicon;                        指定的托盘图标
 strcpy(,我的托盘           添加气泡线索
 ::Shell_NotifyIcon(NIM_ADD,&m_nid);          在托盘区域添加图标 
 HANDLE hNotifyTherad = CreateThread(NULL,0,NotifyIconProc,(LPVOID)&m_nid,0,///创办螺纹来修正托盘图标
CloseHandle(hNotifyTherad); 

5。螺纹处置托盘图标切换

DWORD WINAPI CNetworkDlg::NotifyIconProc(LPVOID lpParameter)
{
 NOTIFYICONDATA *pnotifyicon = (NOTIFYICONDATA*)lpParameter;//把交付出去的手指替换

率先在使受协议条款的约束中画一些图标
 HICON m_hstateicon_1 = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_STATEICON_1));//教育4个图标
 HICON m_hstateicon_2 = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_STATEICON_2));
 HICON m_hstateicon_3 = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_STATEICON_3));
 HICON m_hstateicon_4 = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_STATEICON_4));
////////////////////////////////////不休的切换托盘图标////////////////////////////////////////////////
还是(真)

{
   pnotifyicon->uFlags = NIF_ICON;
   pnotifyicon->hIcon = m_hstateicon_1;
   ::Shell_NotifyIcon(NIM_MODIFY, pnotifyicon);

安眠(10000);//10000手写本切换一次

pnotifyicon->uFlags = NIF_ICON;
pnotifyicon->hIcon = m_hstateicon_2;
::Shell_NotifyIcon(NIM_MODIFY, pnotifyicon);

安眠(10000);//10000手写本切换一次

pnotifyicon->uFlags = NIF_ICON;
pnotifyicon->hIcon = m_hstateicon_3;
::Shell_NotifyIcon(NIM_MODIFY, pnotifyicon);

安眠(10000);//10000手写本切换一次

pnotifyicon->uFlags = NIF_ICON;
pnotifyicon->hIcon = m_hstateicon_4;
::Shell_NotifyIcon(NIM_MODIFY, pnotifyicon);

安眠(10000);//10000手写本切换一次
}
 return 0;
} 

6。处置自界说音讯和托盘卡特尔(托盘体格通常在T),有些顺序初期的就可以执行托盘图标。,看一眼很法令的需求。

率先,人们重写WORDOWPROC职务,继人们在WORKOPROC职务中处置托盘音讯。:

挥动(音讯)
 { 
 case WM_SYSCOMMAND:

  if(wParam == SC_MINIMIZE)
  {   
   CNetworkDlg *dlg=(CNetworkDlg*)AfxGetApp()->GetMainWnd();//获取窗口CWnd手指
   HWND HWND= DLG-> MYHWND;/ /获取HYHWND手指
   ::ShowWindow(hwnd,0);/ /潜匿相互作用
   return TRUE;
  }
  if(wParam == SC_RESTORE)
  {
  }
  break;

 case WM_CLOSE:

  Shell_NotifyIcon(NIM_DELETE, 当软件停工时处理托盘图标
  break;

 case WM_SYSTEMTRAY: 
  {

   if(wParam != IDR_MAINFRAME)
    return 1;
   switch(lParam) 
   {
   case WMYRButoUp://伸出快捷卡特尔时,右纽扣,在这里可是非常钟停工。 
    {
     CMenu menu;
     LPPOINT lpoint = new tagPOINT;
     ::GetCursorPos(lpoint);     // 获取鼠标放置
     (); // 供述伸出式卡特尔
     SetForegroundWindow();//设想点击伸出卡特尔的时辰,卡特尔失掉中心,卡特尔天然产生的停工。
     (MF_STRING, WM_DESTROY, T(退场) 添加卡特尔项停工,点击发送音讯WMY销毁 到主窗口(潜匿),将顺序完毕   
这种典型的卡特尔需求自界说音讯。,做音讯表现和互相牵连的音讯响应职务 
     (TPM_LEFTALIGN, lpoint->x, lpoint->y,很) 决定伸出式卡特尔的放置
     
     HMENU hmenu = ();
     ();// 资源回收
     delete lpoint;// 资源回收
/////////////////////////////////////////////////////////////////执行自界说卡特尔/////////////////////////////////////////////////////////
CMenu menu,*pSubMenu;
LPPOINT lpoint = new tagPOINT;
::GetCursorPos(lpoint);     // 获取鼠标放置
SetForegroundWindow();//设想点击伸出卡特尔的时辰,卡特尔失掉中心,卡特尔天然产生的停工。
(IDR_MENU_TRAY);
pSubMenu = (0);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y, 很) 决定伸出式卡特尔的放置  
HMENU hmenu = pSubMenu->Detach();
pSubMenu->DestroyMenu();// 资源回收
delete lpoint;// 资源回收  
//////////////////////////////////////////////////////////////
     break;
    }

   case WMLLButOndBLCK:/ /双点取左键 
    {
     this->ShowWindow(SW_SHOW);//复杂的显示主窗口完事儿 
     break;
     
    }
   case WM_LBUTTONDOWN:
     { 
     this->ShowWindow(SW_SHOW);//复杂的显示主窗口完事儿 

     break;  
     }
   }
  }
  break;
 }

继运转顺序,当人们极度轻视时,体格人们的自界说音讯。,非常钟托盘图标出如今通告区域,右键有非常钟退场卡特尔。!这是我构成托盘顺序的非常体验。,在实践密码中,您可以更橡皮圈某些。,停飞事情切换到托盘图标,比如,停飞必然的记录在敷用中停止切换。,我打算冠词能帮到你,设想您对职务有某些怀疑,可以反省MSDN。!

设想你有转载,请解说引起。!