基于对话框的托盘程序实现
NOTIFYICONDATA结构体传递托盘消息,是windows底层API中定义的一个结构体;圆形如下:
typedef struct _NOTIFYICONDATA{
DWORD cbSize //结构体的大小,以字节为单位
HWNDhWnd //窗口的句柄
UINT uID//应用程序定义的任务栏图标的标识符
UINT uFlag; //此成员表明具体哪些其他成员为合法数据
UINT uCallbackMessage //应用程序定义的消息标识符
HICONhIcon //增加、修改或删除的图标的句柄
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://在托盘上右键d起时相应处理消息
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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)