Click here to Skip to main content
12,303,777 members (72,301 online)
Click here to Skip to main content
Add your own
alternative version

Stats

41.6K views
4.3K downloads
28 bookmarked
Posted

Example of a SysTray App in Win32

, 13 May 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
How to create a systray application in Win32.

Introduction

Have you ever wondered how to create a cool application that runs in the background like a screen capture?

About the demo

Screenshot - systray_demo.jpg

The demo is a basic systray application with a popup menu and disable/enable option. It is the basic skeleton for anyone who wants to create a systray application.

How to create a systray (taskbar) application

Include the ShellAPI library

#include <shellapi.h>

Init the NOTIFYICONDATA struct

nidApp.cbSize = sizeof(NOTIFYICONDATA); 
nidApp.hWnd = (HWND) hWnd;
nidApp.uID = IDI_SYSTRAYDEMO; 
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; 
nidApp.hIcon = hMainIcon; 
nidApp.uCallbackMessage = WM_USER_SHELLICON; 
LoadString(hInstance, IDS_APPTOOLTIP,nidApp.szTip,MAX_LOADSTRING);

Show the systary icon

Shell_NotifyIcon(NIM_ADD, &nidApp);

Response to the message

Now our application gets a callback message when the mouse is moving over the systray icon. In our window callback function:

switch (message)
{
    case WM_USER_SHELLICON: 
        // systray msg callback 
        switch(LOWORD(lParam)) 
        {
            case WM_RBUTTONDOWN:

Now we are monitoring the right button click.

Create a dynamic popup menu

UINT uFlag = MF_BYPOSITION|MF_STRING;
GetCursorPos(&lpClickPoint);
hPopMenu = CreatePopupMenu();
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_ABOUT,_T("About"));
if ( bDisable == TRUE )
{
    uFlag |= MF_GRAYED;
}
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST2,_T("Test 2"));
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST1,_T("Test 1"));
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));
if ( bDisable == TRUE )
{
    InsertMenu(hPopMenu,0xFFFFFFFF, 
               MF_BYPOSITION|MF_STRING,IDM_ENABLE,_T("Enable"));
}
else 
{
    InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_DISABLE,_T("Disable"));    
}
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));    
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_EXIT,_T("Exit"));     
SetForegroundWindow(hWnd);
TrackPopupMenu(hPopMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_BOTTOMALIGN,
               lpClickPoint.x, lpClickPoint.y,0,hWnd,NULL);

When the application is closed

We need to delete the systray.

Shell_NotifyIcon(NIM_DELETE,&nidApp);

A word from the author

More information can be found from the MSDN site: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shell_notifyicon.asp.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Mark Zitnik
Web Developer
Israel Israel
I have been developing since the age 12

Started on commador 64 and moved to C/Assembler

In the last 7 years i have been developing performance monitoring software.

Programming languages: C/C++/Java



You may also be interested in...

Comments and Discussions

 
Generalit doesn't work on windows 7 Pin
gndnet17-Sep-10 6:27
membergndnet17-Sep-10 6:27 
GeneralProblem with menu Pin
Sir Kot12-Jul-07 11:30
memberSir Kot12-Jul-07 11:30 
GeneralRe: Problem with menu Pin
Sir Kot12-Jul-07 11:50
memberSir Kot12-Jul-07 11:50 
GeneralRe: Problem with menu Pin
DavidCrow10-Oct-07 6:05
mvpDavidCrow10-Oct-07 6:05 
GeneralTHANK YOU THANK YOU THANK YOU !!!!!!!! [modified] Pin
Danacom15-May-07 14:49
memberDanacom15-May-07 14:49 
GeneralRe: THANK YOU THANK YOU THANK YOU !!!!!!!! [modified] Pin
Member 820973721-Sep-11 15:39
memberMember 820973721-Sep-11 15:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160530.1 | Last Updated 14 May 2007
Article Copyright 2007 by Mark Zitnik
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid