Animated Tray Icon Class

There was one reason why I sat down to write this class. And as is usually the case, necessity is the mother of invention. Well, it started off like this. I had a time consuming task going on and during this time I wanted to have an animated tray icon to appear in the tray to indicate the ongoing task. When this task got over, I needed a way to remove this. The examples I'd seen earlier couldn't by themselves address to my problem as, the task which I was performing was on a thread and since it didn't have any window, there was no proper way to set a timer or whatever to animate the icon in the tray. So, I was looking at some way to accomplish the same by making the animation to happen on a different thread than the one in which it is being invoked.

Basically, my anitrayicon class' constructor starts off by creating a thread and then this Thread Procedure creates an invisible window. The handle to this window is set into anitrayicon object's m_hWnd. All further messages to the tray icon are basically messages sent to this window. Thus, the main function of the WndProc for the Trayicon window is to wait for messages and call various Shell_Notifyicon() to accomplish the desired action and to animate the icon on a WM_TIMER message.

Here is how one uses it :

Using the AnimatedTrayIcon class

Have an object on the stack / heap.
void myFunc()
{
 AnimatedTrayIcon oTrayIcon;
 HICON* hIconArray = new HICON[5];
 hIconArray[0] = LoadIcon(............);//handle to icon 1
 hIconArray[1] = LoadIcon(............);//handle to icon 2
 hIconArray[2] = LoadIcon(............);//handle to icon 3
 hIconArray[3] = LoadIcon(............);//handle to icon 4
 hIconArray[4] = LoadIcon(............);//handle to icon 5
 oTrayIcon.SetFrameIconInfo(hIconArray,5);
 oTrayIcon.SetFrameRate(250);//in ms
 oTrayIcon.Start();
 ..
 ..
 ..
 ..

 //u can stop the tray icon here if u want by calling 
 oTrayIcon.Stop();
 ..
 ..
 //and then restart it at a later stage by calling 
 ..
 oTrayIcon.Continue();

 //long process.....

 //one needn't necessarily call Remove() if that is the only tray icon one  
 //needs to have the destructor automatically removes the icon 
}

Downloads

Download source - 3 Kb


Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: September 23, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The cloud is not just about a runtime platform for your projects – now, you can do your development in the cloud, too. Check out this upcoming eseminar to learn how the cloud improves your development experience and team collaboration. Join Dana Singleterry, Principal Product Manager for Oracle Dev Tools, as he discusses how to simplify every aspect of the development lifecycle, including requirements gathering, version management, code …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date