1、 托盘图标应该有信息提示,也就是ToolTips。
2、 单击右键应该弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令。 逆风者
3、 单击左键应该显示进一步的信息或者控制图标所代表的对象,例如,当左键单击声音图标时进行音量控制。如果没有进一步的信息或控制,则不要有任何动作。
CTrayIcon对上面的特性进行了全面的封装。为了示范CTrayIcon的工作原理,本文提供一个例子程序TrayTest1,图一是运行程序后显示的一个对话框:
图一 TrayTest1运行后显示的对话框
当把图标安装到系统托盘之后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要你的鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里,如图二:
图二 消息显示窗口
当鼠标光标移到托盘图标上时,在图标附近会显示提示信息,如图三:
图三 显示Tooltip
为了正确使用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); //删除图标
CTrayIcon将此代码解释成NIM_DELETE。你已经看到,所有这些表示行为的编码,标志都被一个使用方便的函数所替代:这都归功于C !现在,我们来看看如何处理通知消息以及前面提到的所有UI特性。通知消息的处理必须要设置图标之前,但是要在创建窗口之后调用CTrayIcon::SetNotificationWnd,做这件事情的最佳场所是在OnCreate处理例程中,TrayTest就是在这里处理的: 本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 下一页>> |