vc中程序最小化到托盘(任务拦)的实现

来源:互联网 发布:同知是什么官 编辑:程序博客网 时间:2024/04/29 13:15
 
vc中有时候要实现程序最小化,实际上那是的隐藏.那么如何实现那,下面我将给出我自己的粗浅建议.
程序最小化到托盘,是把程序隐藏,并在托盘上加上响应的图标,对图标操作发送消息来实现的.下面给出做法供大家参考:
首先在.h文件里加入自定义消息:
#define WM_SHOWTASK   (WM_USER + 0x100)    //一般数值大于100
//{{AFX_MSG(CMPARTDlg)
中间加入:
afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
//}}AFX_MSG
 DECLARE_MESSAGE_MAP()
 
在.cpp文件里加入如下代码:
BEGIN_MESSAGE_MAP(CMPARTDlg, CDialog)
 //{{AFX_MSG_MAP(CMPARTDlg)
中间加入消息声明:
ON_MESSAGE(WM_SHOWTASK,onShowTask)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
要实现最小话到托盘的函数里加入:
void CMyDlg::OnMenuHpanel()
{
 NOTIFYICONDATA nid;
   nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
     nid.hWnd=this->m_hWnd;
      nid.uID=IDR_MAINFRAME;
      nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
      nid.uCallbackMessage=WM_SHOWTASK;  //自定义的消息名称
     nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
                                                                            //    IDR_MAINFRAME  是在托盘显示的图标
      strcpy(nid.szTip,"计划任务提醒");   //信息提示条为“计划任务提醒”
      Shell_NotifyIcon(NIM_ADD,&nid);   //在托盘区添加图标 
      ShowWindow(SW_HIDE);   //隐藏主窗口
}
LRESULT CMPARTDlg::onShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
   //其中代码前面文章有可查
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理

 this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 
}
break;
}
return 0;
}
//应用程序退出时,主窗口销毁消息响应处理函数
void CMyDlg::OnDestroy()
{
 CDialog::OnDestroy(); 
 //程序退出,从托盘区删除图标
 NOTIFYICONDATA nc;
 nc.cbSize = sizeof(NOTIFYICONDATA);
  nc.hWnd = m_hWnd;
    nc.uID = IDC_NOTIFYICON;
 Shell_NotifyIcon(NIM_DELETE, &nc);
 }
原创粉丝点击