在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);
}
在运行相关函数中添加
ShowWindow(SW_NORMAL);
SetForegroundWindow();
在关于相关函数中添加: CAboutDlg aboutDlg;
aboutDlg.DoModal();
在退出相关函数中添加
// 退出程序
SendMessage(WM_CLOSE);
//使应用程序退出时图标消失
CDialog::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE,&nd);//使应用程序退出时图标消失