您的位置:首页 > 移动开发

Example of a SysTray App in Win32

2012-11-28 13:11 447 查看

Example of a SysTray App in Win32

By Mark Zitnik,
13 May 2007




2.81 (9 votes)


1


2


3


4


5
2.81/5 - 9 votes
μ 2.81, σa 2.92 [?]

Download demo - 256 KB
Download source - 21.2 KB

Introduction

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

About the demo



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


Collapse |
Copy Code
#include <shellapi.h>

Init the NOTIFYICONDATA struct


Collapse |
Copy Code
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


Collapse |
Copy Code
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:


Collapse |
Copy Code
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


Collapse |
Copy Code
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.


Collapse |
Copy Code
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)

About the Author



Mark Zitnik
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: