VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
VC Tray Icon的使用

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

为CMainFrame增加如下的成员变量:
 NOTIFYICONDATA m_trayIcon;
 CMenu m_menuTray;

在CMainFrame的OnCreate函数末尾增加:
 m_trayIcon.cbSize = sizeof(NOTIFYICONDATA);
 m_trayIcon.hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance,
  MAKEINTRESOURCE(IDI_TRAYICON), IMAGE_ICON, 16, 16, 0);
 m_trayIcon.hWnd = m_hWnd;
 m_trayIcon.uID = MAINTRAYICON;
 m_trayIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
 m_trayIcon.uCallbackMessage = WM_TRAYICON;
 strcpy(m_trayIcon.szTip, LoadResString(IDS_TOOLTIP));
 Shell_NotifyIcon(NIM_ADD, &m_trayIcon);

增加消息WM_TRAYICON响应函数:
ON_MESSAGE(WM_TRAYICON,OnTrayNotify)

int CMainFrame::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
 if(wParam != MAINTRAYICON)
  return 0L;
 
 if(m_menuTray.m_hMenu == NULL && !m_menuTray.LoadMenu(IDR_MAINFRAME))
  return 0;
 
 CMenu* pSubMenu = m_menuTray.GetSubMenu(0);
 if (!pSubMenu)
  return 0;
 
 if (lParam == WM_RBUTTONUP)
 {
  ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
  CPoint pos;
  GetCursorPos(&pos);
  
  SetForegroundWindow();
  pSubMenu->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON
   |TPM_RIGHTBUTTON, pos.x, pos.y, this, NULL);
 }
 else if(lParam == WM_LBUTTONDOWN)
 {
  ShowWindow(SW_SHOW);
  SetForegroundWindow();
 }
 else if(lParam == WM_LBUTTONDBLCLK)
 {
  SendMessage(WM_COMMAND, pSubMenu->GetMenuItemID(0), 0);
 }
 return 1L;
}
如果同时还需要屏蔽窗口关闭按钮的话需要增加消息处理函数:
ON_WM_SYSCOMMAND()

void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
 if(nID == SC_CLOSE)
 {
  ShowWindow(SW_HIDE);
  return;
 }
 CFrameWnd::OnSysCommand(nID, lParam);
}

在窗口的Destroy函数调用:
 Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);



相关文章

相关软件