vc小技巧(1)--最小化到任务栏显示

本文介绍了一个使用C++实现的应用程序如何最小化到系统托盘并响应托盘图标操作的方法。详细展示了如何创建托盘图标、处理托盘消息、以及如何通过托盘图标触发程序的各种操作。

1

void CMFCTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {//
  if (nID==SC_MINIMIZE)
  {
   ShowWindow(SW_HIDE);
   toTray() ;
   return;
 }
  CDialog::OnSysCommand(nID, lParam);
 }

2

void CMFCTestDlg::toTray()
{
 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));
 strcpy(nid.szTip,"计划任务提醒");//信息提示条为“计划任务提醒”
 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
 ShowWindow(SW_HIDE);//隐藏主窗口
}
LRESULT CMFCTestDlg::onShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
 if(wParam!=IDR_MAINFRAME)
 return 1;
 switch(lParam)
 {
  case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
  {

   LPPOINT lpoint=new tagPOINT;
   ::GetCursorPos(lpoint);//得到鼠标位置
   CMenu menu;
   menu.CreatePopupMenu();//声明一个弹出式菜单
   //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
   //隐藏),将程序结束。
   menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
   menu.AppendMenu(MF_STRING,WM_LBUTTONDBLCLK,"展开");
   //确定弹出式菜单的位置
   menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
   //资源回收
   HMENU hmenu=menu.Detach();
   menu.DestroyMenu();
   delete lpoint;
  }
  break;
  case WM_LBUTTONDBLCLK://双击左键的处理
  {
   this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
  }
  break;
 }
 return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值