请问如何让我的程序托盘化在任务栏里面?

2020-05-17 科技 97阅读
我的笔记如下帮你解决:

基于对话框的托盘程序实现
NOTIFYICONDATA结构体传递托盘消息,是windows底层API中定义的一个结构体;圆形如下:
typedef struct _NOTIFYICONDATA{
DWORD cbSize; //结构体的大小,以字节为单位
HWND hWnd; //窗口的句柄
UINT uID; //应用程序定义的任务栏图标的标识符
UINT uFlag; //此成员表明具体哪些其他成员为合法数据
UINT uCallbackMessage //应用程序定义的消息标识符
HICON hIcon //增加、修改或删除的图标的句柄
TCHAR szTip[64] //指向一个以\0结束的字符串的指针
DWORD dwState; //Version 5.0,图标的状态
DWORD dwStateMask; //指明dwState成员的哪些位可以被设置或访问
TCHAR szInfo[256]; //指向一个以\0结束的字符串的指针
union {
UINT uTimeout;
UINT uVersion'
};
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
}NOTIFYICONDATA,*PNOTIFYICONDATA;
1、创建一个MFC对话框程序,名为TrayDialog,为CTrayDialogDlg类添加自定义消息WM_TRAY_NOTIFYICONDATA
2、关联消息映射,消息处理函数如下:
LONG CTrayDialog::OnTrayNotifyicondata(WPARAM wparam,LPARAM lparam)
{
switch (lParam)
{
case WM_RBUTTONUP://在托盘上右键弹起时相应处理消息
case WM_LBUTTONDBLCLK://双击托盘的相应消息
ShowWindow(SW_SHOW);
TrayMessage(m_hWnd,NIM_DELETE,NULL,L"");
default:
;
}
return 0;
}
3、添加全局函数TrayMessage(),该函数用来实现托盘信息发送,从而使托盘化,代码如下
BOOL TrayMessage(HWND hWnd,DWORD dwMessage,HICON hIcon,wchar_t* pszTip)
{
BOOL bReturn;
NOTIFYICONDATA Notifydata;
Notifydata.cbSize = sizeof(NOTIFYICONDATA);
Notifydata.hWnd=hWnd;
Notifydata.uID=IDR_MAINFRAME;
Notifydata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
Notifydata.uCallbackMessage=WM_TRAY_NOTIFYICONDATA;
Notifydata.hIcon=hIcon;
lstrcpynW(Notifydata.szTip,pszTip,sizeof(Notifydata.szTip));
bReturn=Shell_NotifyIcon(dwMessage,&Notifydata);
if (hIcon)
{
DestroyIcon(hIcon);
return bReturn;
}
}
4、为类CTrayDialog的OnSysCommand()加入最小化处理事件,加入如下代码:
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
} //=============================
else if (nID==SC_MINIMIZE)
{
TrayMessage(m_hWnd,NIM_ADD,NULL,L"托盘实例");
TrayMessage(m_hWnd,NIM_MODIFY,m_hIcon,L"托盘实例");
ShowWindow(SW_HIDE);
}
在对话框上添加一个按钮,名字为最小化为托盘,为该按钮单击事件添加如下代码:
TrayMessage(m_hWnd,NIM_ADD,NULL,L"托盘实例");
TrayMessage(m_hWnd,NIM_MODIFY,m_hIcon,L"托盘实例");
ShowWindow(SW_HIDE);
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com