程序最小化到系统托盘

使用Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA lpdata)函数。在此之前需要建立PNOTIFYICONDATA结构体。
MSDN中PNOTIFYICONDATA结构体如下:
typedef struct _NOTIFYICONDATA {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    #if (_WIN32_IE < 0x0500)
        TCHAR szTip[64];
    #else
        TCHAR szTip[128];
    #endif
    #if (_WIN32_IE >= 0x0500)
        DWORD dwState;
        DWORD dwStateMask;
        TCHAR szInfo[256];
        union {
            UINT  uTimeout;
            UINT  uVersion;
        } DUMMYUNIONNAME;
        TCHAR szInfoTitle[64];
        DWORD dwInfoFlags;
    #endif
    #if (_WIN32_IE >= 0x600)
        GUID guidItem;
    #endif
} NOTIFYICONDATA, *PNOTIFYICONDATA;
我们需要定义这几个参数:
cbSize = sizeof(NOTIFYICONDATA);//结构体大小
tnd.hWnd = this->m_hWnd;//接收发送出消息的窗口的句柄
tnd.uID = IDR_MAINFRAME;//最小化后显示在托盘的图标的ID
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;//指示结构体中有效的成员
tnd.uCallbackMessage = UM_TRAY;//程序自定义的消息,当鼠标移动、单击、双击
或是其他鼠标事件发生在托盘程序上时,所发送的消息
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//所加入图标的句柄
strcpy(tnd.szTip,"我的托盘程序");//鼠标移到我们的托盘程序上时现实的文字
 
看了以上文字,大家可能对托盘程序的原理有些蒙,那我就简单地讲讲吧。
当调用Shell_NotifyIcon时,程序向右下角发出了一个消息,这个消息在函数中第一个参数有定义,可以是加入( NIM_ADD)等。设定的NOTIFYICONDATA结构体,指定了显示在托盘的程序图标、当鼠标事件发生时,发送的一个UM_TRAY消息、接受这个消息的窗口句柄等内容。我们可以在程序中自己添加对UM_TRAY的相应,我是这样写的:
void CMyRingDlg::OnTray(WPARAM wParam,LPARAM lParam)
{
 UINT uID;//发出该消息的图标的ID
 UINT uMouseMsg;//鼠标动作
 POINT pt;
 uID = (UINT)wParam;
 uMouseMsg = (UINT)lParam;
 if(uMouseMsg == WM_LBUTTONDOWN)//如果是单击右键
 {
  switch(uID)
  {
  case IDR_MAINFRAME://如果是我们的图标
   GetCursorPos(&pt);//取得鼠标位置
   AfxGetApp()-> m_pMainWnd->ShowWindow(SW_SHOWNORMAL);//显示程序窗口
   break;
  default:
   break;
  }
 }
 return;
}
当然,在执行Shell_NotifyIcon后还需要隐藏我们的窗口,我们用AfxGetApp( )->m_pMainWnd->ShowWindow(SW_HIDE)来实现。
 
这样,就实现了我们把程序隐藏到托盘的要求。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值