天天看点

windows系统托盘及托盘菜单

windows系统托盘及托盘菜单

window系统托盘及托盘菜单 下面是一个MFC写的wifi助手程序用于实现系统托盘的代码片段

void CWiFiAssistantDlg::OnClose()

{

 // TODO: 在此添加消息处理程序代码和/或调用默认值

 ExitPtDlg exitPtDlg;

 int varReturn = exitPtDlg.DoModal();

 if(varReturn == IDOK)

 {

  preExit();

  CDialogEx::OnClose();

 }

 else //在通盘显示程序图标

 {

  NOTIFYICONDATA tnd;

  tnd.cbSize=sizeof(NOTIFYICONDATA);

  tnd.hWnd=this->m_hWnd; // 要显示托盘图标的窗口句柄

  tnd.uID=IDR_MAINFRAME; //程序图标资源ID

  tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;

  tnd.uCallbackMessage=WM_MYMESSAGE_CLICK; //自定义消息,当图标发送事件时会向窗口发送此消息,会在窗口过程函数接收到此消息,接收到消息时进行你的处理

  tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

  lstrcpy(tnd.szTip, L"WiFi助手");//图标提示为”WiFi助手”

  Shell_NotifyIcon(NIM_ADD,&tnd);//向任务栏添加图标

  ShowWindow(SW_HIDE);

 }

}

LRESULT CWiFiAssistantDlg::OnMyMessageClick(WPARAM wParam, LPARAM lParam) //MFC里的自定义消息处理函数

{

 UINT uID;//发出该消息的图标的ID

 UINT uMouseMsg;//鼠标动作

 POINT pt;

 uID=(UINT) wParam;

 uMouseMsg=(UINT) lParam;

 if(uMouseMsg == WM_LBUTTONDBLCLK)//如果是双击左键

 {

  switch(uID)

  {

   case IDR_MAINFRAME://如果是我们的图标

    GetCursorPos(&pt);//取得鼠标位置

    ShowWindow(SW_SHOWNORMAL);

    SetForegroundWindow();

   break;

  }

 }

 else if(uMouseMsg == WM_RBUTTONDOWN)//如果是单击右键

 {

  CMenu menuTray, *pPopup;

  CPoint point;

  GetCursorPos(&point);

  menuTray.LoadMenuW(IDR_MENU1); //从资源载入菜单

  pPopup=menuTray.GetSubMenu(0); //获得子菜单指针

  pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y,this); //设置菜单显示位置并显示

  pPopup->Detach();

  menuTray.DestroyMenu();

 }

 return 0;

}

void CWiFiAssistantDlg::preExit() //程序退出时调用

{

 NOTIFYICONDATA tnid;

 tnid.cbSize=sizeof(NOTIFYICONDATA);

 tnid.hWnd=GetSafeHwnd();

 tnid.uID=IDR_MAINFRAME; //保证删除的是我们的图标

 Shell_NotifyIcon(NIM_DELETE, &tnid);

}

//菜单项对应处理函数

void CWiFiAssistantDlg::OnMenuShow()

{

 SetForegroundWindow();

 ShowWindow(SW_SHOWNORMAL);

 // TODO: 在此添加命令处理程序代码

}

//菜单项对应处理函数

void CWiFiAssistantDlg::OnMenuExit()

{

 // TODO: 在此添加命令处理程序代码

 preExit();

 OnOK();

}

继续阅读