聚星亭

吾笨笨且懒散兮 急须改之而奋进
posts - 74, comments - 166, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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

Posted on 2009-04-03 17:55 besterChen 阅读(1172) 评论(0)  编辑 收藏 引用 所属分类: WTL/MFC/GuiLib
         看过一些文章,再网上也找了好多的资料,发现都比较麻烦,等自己操作了一遍以后才知道,原来不难的,现在把操作过程记录下来,具体如下:


         第一步,声明一个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);//删除托盘图标

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理