系统托盘编程完全指南
2010-07-25 20:46:55 来源:WEB开发网为了正确使用CTrayIcon,首先你必须在程序的某个地方实例化CTrayIcon,例子程序是在主框架中创建CTrayIcon实例的。
Class MainFrame public CFrameWnd {protected: CTrayIcon m_trayIcon; // my tray icon
…….
};
然后,你必须提供一个ID。这是在图标生命期内的唯一标示,即便以后你修改了要显示的图标。这个ID也是鼠标事件发生时你将获得的ID。它不一定必须是图标的资源ID,例子程序中这个ID为IDR_TRAYICON,由框架的构造函数CMainFrame通过成员初始化列表对m_trayIcon进行初始化:
CMainFrame::CMainFrame() : m_trayIcon(IDR_TRAYICON){
……
}
为了添加图标,必须根据具体情况调用下列的 SetIcon 函数之一:
m_trayIcon.SetIcon(IDI_MYICON); //资源 ID
m_trayIcon.SetIcon("myicon"); //资源名
m_trayIcon.SetIcon(hicon); //HICON
m_trayIcon.SetStandardIcon(IDI_WINLOGO); //系统图标
除了SetIcon(UINT uID)之外,这些函数都有一个LPCSTR类型的可选参数用于指定提示文本。SetIcon(UINT uID)使用ID与uID相同的串资源作为提示文本。例如,TrayTest1有一行代码是这样的:
// (在mainframe.cpp文件中)
m_trayIcon.SetIcon(IDI_MYICON);
这行代码也设置了提示信息,因为TrayTest1有一个串资源,其ID也是IDI_MYICON。这在TRAYTEST.RC文件中可以看到:
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDI_MYICON "双击图标激活 TRAYTEST."
END
如果你想改变图标,可以用不同的ID或者HICON再次调用SetIcon函数之一。CTrayTest便会用NIM_MODIFY而不是NIM_ADD来改变图标。相同的函数甚至可以用于删除图标,如:
m_trayIcon.SetIcon(0); //删除图标
更多精彩
赞助商链接