vc 最小化到托盘

在Dlg头文件添加

  LRESULT  WindowProc(UINT message, WPARAM wParam, LPARAM lParam); 和

 NOTIFYICONDATA nd;

Dlg.cpp 中添加 

  #define WM_NOTIFYICON WM_USER+5 //自定义消息的ID

BOOL CVc_136Dlg::OnInitDialog()中添加

第一步:

 nd.cbSize = sizeof (NOTIFYICONDATA); //以字节为单位的这个结构的大小
 nd.hWnd = m_hWnd; //接收托盘图标通知消息的窗口句柄
 nd.uID = IDR_MAINFRAME; //应用程序定义的该图标的ID号
 nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; //设置该图标的属性,NIF_ICON:设置成员hIcon有效 ,NIF_MESSAGE:设置成员uCallbackMessage有效 ,NIF_TIP:设置成员szTip有效
 nd.uCallbackMessage= WM_NOTIFYICON;  //应用程序定义的消息ID号,此消息传递给hWnd
 nd.hIcon = m_hIcon;  //图标的句柄
 strcpy(nd.szTip, "托盘程序应用实例");//鼠标停留在图标上显示的提示信息 
 Shell_NotifyIcon(NIM_ADD, &nd);

第二步:

LRESULT CTrayDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 switch(message)
 {  
 case WM_NOTIFYICON: //如果是用户定义的消息
  if(lParam==WM_LBUTTONDBLCLK)
  {
   //鼠标双击时主窗口出现
   ShowWindow(SW_SHOW);
  }
  else if(lParam==WM_RBUTTONDOWN)
  {
   //鼠标右键单击弹出选单
   CMenu menu;
   menu.LoadMenu(IDR_RIGHT_MENU); //载入事先定义的选单
   CMenu* pMenu=menu.GetSubMenu(0);
   CPoint pos;
   GetCursorPos(&pos);
   ::SetMenuDefaultItem(pMenu->m_hMenu, 0, TRUE); //设置第一个菜单项为黑体
   ::SetForegroundWindow(nd.hWnd);
   pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
  } break;
 case WM_SYSCOMMAND: //如果是系统消息
  if(wParam==SC_MINIMIZE)
  {
   //接收到最小化消息时主窗口隐藏
   ShowWindow(SW_HIDE);
   return 0;
  } break;
 }
 return CDialog::WindowProc(message, wParam, lParam);
}

vc 最小化到托盘

在运行相关函数中添加 
 ShowWindow(SW_NORMAL); 
 SetForegroundWindow();

 

在关于相关函数中添加: CAboutDlg aboutDlg;
 aboutDlg.DoModal();

在退出相关函数中添加

 // 退出程序
 SendMessage(WM_CLOSE);
 //使应用程序退出时图标消失
 CDialog::OnDestroy();
 ::Shell_NotifyIcon(NIM_DELETE,&nd);//使应用程序退出时图标消失