将程序最小化到托盘的方法

         看过一些文章,再网上也找了好多的资料,发现都比较麻烦,等自己操作了一遍以后才知道,原来不难的,现在把操作过程记录下来,具体如下:


         第一步,声明一个NOTIFYICONDATA类,即: NOTIFYICONDATA NotifyIcon;
                     该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。
         第二步,声明一个响应函数 afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);
                     用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。

                     这里顺手贴一些我写的代码:
void  CbeskitDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
    
if  (IParam  ==  WM_LBUTTONUP)
    { 
        
//  左键单击弹出主界面
        ModifyStyleEx( 0 ,WS_EX_TOPMOST);
        ShowWindow(SW_SHOW);
    }
    
else   if  (IParam  ==  WM_RBUTTONDOWN)
    {
        
// 右键单击弹出主菜单
        
    }
}
         第三步,定义消息名称和消息号 :#define WM_NC WM_USER+1001    //用来处理鼠标指向托盘图标时的提示信息
                     1001只是用于指定一个消息号,可以随便指定。
         第四步,注册上一步自定义的消息的处理函数,
                     就是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加 ON_MESSAGE(WM_NC,OnNotifyIcon)。
         第五步,添加将图标加入系统托盘的代码:
     //  用于加载到托盘区
    m_NotifyIcon.cbSize = sizeof (NOTIFYICONDATA);
    m_NotifyIcon.hIcon
= AfxGetApp() -> LoadIcon(IDR_MAINFRAME);     //  装载程序图标
    m_NotifyIcon.hWnd = m_hWnd;
    lstrcpy(m_NotifyIcon.szTip,
" beskit v1.0 " );             //  这里是鼠标移到托盘图标时的提示信息
    m_NotifyIcon.uCallbackMessage = WM_NC;
     m_NotifyIcon.uFlags = NIF_ICON  |  NIF_MESSAGE  |  NIF_TIP;
    
    Shell_NotifyIcon(NIM_ADD,
& m_NotifyIcon);     //  添加托盘图标
                     只要执行上述代码,就会在系统托盘区添加一个程序图标。
         第六步,捕捉程序最小化的消息:
              在OnSysCommand中增加:
     else   if ( (nID  &   0xFFF0 ==  SC_MINIMIZE)
    {
        toTray(); 
// 放入托盘的函数
    }

          到这里就可以了! 

           添加好了图标以后,等程序退出或者其它条件,需要把图标从系统托盘区删除,执行下面的代码:
                    Shell_NotifyIcon(NIM_DELETE, &m_NotifyIcon);//删除托盘图标

你可能感兴趣的:(将程序最小化到托盘的方法)