系统托盘大家应该都了解,如果程序需要常时间运行,将程序缩小的托盘中移动是个不错的选择。
现在看看系统托盘应该怎么实现:
首先,必须知道一个结构体NOTIFYICONDATA
,这是MFC中包含系统需要的用来传递托盘区域消息的信息结构体,有了它,我们今天的任务就完全可以轻松完成了!
这时候,我们可以在我们的类中申明一个NOTIFYICONDATA的成员变量为m_nid。
接下来,我们可以给这个结构体变量赋我们想要的值了,记住赋值语句要写在OnInitDialog初始化窗口函数里,不要写在构造函数中,否则将会无效。
m_nid.cbSize = sizeof( NOTIFYICONDATA );
m_nid.hWnd = m_hWnd;m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_nid.uCallbackMessage = WM_SYSTEMTRAY; //自定义消息
m_nid.hIcon = m_hIcon;
strcpy(m_nid.szTip, "认证系统客户端");
::Shell_NotifyIcon(NIM_ADD, &m_nid);
然后,让我们一句句的解析这段代码,
m_nid.cbSize = sizeof( NOTIFYICONDATA );
cbSize表示结构体的大小,以字节未单位,这里赋值了NOTIFYICONDATA的结构体标准大小就行了,用sizeof函数就能获得其字节大小
m_nid.hWnd = m_hWnd;
hWnd是你想要赋予托盘的窗口句柄,MFC的窗口类中因为都是继承CDialog类,所以其中会有一个成员变量是m_hWnd保存着当前实例窗口的具体句柄,我们将其赋值给它就行了
m_nid.uID = IDR_MAINFRAME;