正文
mfc 对话框程序 托盘实现
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
1 在头文件里面定义 消息
#define WM_SHOWTASK WM_USER+10
在主窗口类里面定义 一个变量 两个函数
a 变量 托盘结构体的变量
NOTIFYICONDATA m_nid;
b 初始化上述变量的函数
void ToTray(void);
c 托盘的消息处理函数
LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
2 在cpp里面 添加一下内容
a 在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间添加映射消息
ON_MESSAGE(WM_SHOWTASK,onShowTask)
b 在初始化函数托盘结构体 初始化的函数
ToTray();
c 添加 托盘结构体 初始化
void CNotifyiconTestDlg::ToTray(void)
{m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
m_nid.hWnd = this->m_hWnd;
m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ;
m_nid.uCallbackMessage = WM_SHOWTASK;
//自定义的消息名称 WM_SHOWTASK 头函数中定义为WM_USER+10
m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
StrCpyW(m_nid.szTip,L"托盘图标");//当鼠标放在上面时,所显示的内容
Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盘区添加图标
}
d 消息处理函数的实现
LRESULT CNotifyiconTestDlg::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,L"退出");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOWNORMAL);//简单的显示主窗口
}
break;
}
return 0;
}
注 :可以把ToTray 函数去掉,把函数内容放到初始化里面