1 const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 1.1 2001/05/13 21:57:07 administrator Exp $";
2 /*********************************************************************
4 * File : $Source: /home/administrator/cvs/ijb/w32taskbar.c,v $
6 * Purpose : Functions for creating, setting and destroying the
9 * Copyright : Written by and Copyright (C) 2001 the SourceForge
10 * IJBSWA team. http://ijbswa.sourceforge.net
12 * Written by and Copyright (C) 1999 Adam Lock
15 * This program is free software; you can redistribute it
16 * and/or modify it under the terms of the GNU General
17 * Public License as published by the Free Software
18 * Foundation; either version 2 of the License, or (at
19 * your option) any later version.
21 * This program is distributed in the hope that it will
22 * be useful, but WITHOUT ANY WARRANTY; without even the
23 * implied warranty of MERCHANTABILITY or FITNESS FOR A
24 * PARTICULAR PURPOSE. See the GNU General Public
25 * License for more details.
27 * The GNU General Public License should be included with
28 * this file. If not, you can view it at
29 * http://www.gnu.org/copyleft/gpl.html
30 * or write to the Free Software Foundation, Inc., 59
31 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
34 * $Log: w32taskbar.c,v $
36 *********************************************************************/
45 #include "w32taskbar.h"
49 const char w32taskbar_h_rcs[] = W32TASKBAR_H_VERSION;
51 #define WM_TRAYMSG WM_USER+1
53 static HMENU g_hmenuTray;
54 static HWND g_hwndTrayX;
56 static LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
59 /*********************************************************************
61 * Function : CreateTrayWindow
63 * Description : Creates and returns the invisible window responsible for processing tray messages.
66 * 1 : hInstance = instance handle of this application
68 * Returns : Handle of the systray window.
70 *********************************************************************/
71 HWND CreateTrayWindow(HINSTANCE hInstance)
74 static const char *szWndName = "JunkbusterTrayWindow";
77 wc.lpfnWndProc = TrayProc;
80 wc.hInstance = hInstance;
85 wc.lpszClassName = szWndName;
89 g_hwndTrayX = CreateWindow(szWndName, szWndName,
90 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
91 CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
93 ShowWindow(g_hwndTrayX, SW_HIDE);
94 UpdateWindow(g_hwndTrayX);
96 g_hmenuTray = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_TRAYMENU));
103 /*********************************************************************
105 * Function : TraySetIcon
107 * Description : Sets the tray icon to the specified shape.
110 * 1 : hwnd = handle of the systray window
111 * 2 : uID = user message number to notify systray window
112 * 3 : hicon = set the current icon to this handle
114 * Returns : Same value as `Shell_NotifyIcon'.
116 *********************************************************************/
117 BOOL TraySetIcon(HWND hwnd, UINT uID, HICON hicon)
121 memset(&nid, 0, sizeof(nid));
123 nid.cbSize = sizeof(nid);
126 nid.uFlags = NIF_ICON;
127 nid.uCallbackMessage = 0;
130 return( Shell_NotifyIcon(NIM_MODIFY, &nid) );
135 /*********************************************************************
137 * Function : TrayAddIcon
139 * Description : Adds a tray icon.
142 * 1 : hwnd = handle of the systray window
143 * 2 : uID = user message number to notify systray window
144 * 3 : hicon = handle of icon to add to systray window
145 * 4 : pszToolTip = tool tip when mouse hovers over systray window
147 * Returns : Same as `Shell_NotifyIcon'.
149 *********************************************************************/
150 BOOL TrayAddIcon(HWND hwnd, UINT uID, HICON hicon, const char *pszToolTip)
154 memset(&nid, 0, sizeof(nid));
156 nid.cbSize = sizeof(nid);
159 nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
160 nid.uCallbackMessage = WM_TRAYMSG;
165 strcpy(nid.szTip, pszToolTip);
168 return( Shell_NotifyIcon(NIM_ADD, &nid) );
173 /*********************************************************************
175 * Function : TrayDeleteIcon
177 * Description : Deletes a tray icon.
180 * 1 : hwnd = handle of the systray window
181 * 2 : uID = user message number to notify systray window
183 * Returns : Same as `Shell_NotifyIcon'.
185 *********************************************************************/
186 BOOL TrayDeleteIcon(HWND hwnd, UINT uID)
190 memset(&nid, 0, sizeof(nid));
192 nid.cbSize = sizeof(nid);
196 return( Shell_NotifyIcon(NIM_DELETE, &nid) );
201 /*********************************************************************
203 * Function : TrayProc
205 * Description : Call back procedure processes tray messages.
208 * 1 : hwnd = handle of the systray window
209 * 2 : msg = message number
210 * 3 : wParam = first param for this message
211 * 4 : lParam = next param for this message
213 * Returns : Appropriate M$ window message handler codes.
215 *********************************************************************/
216 LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
229 UINT uID = (UINT) wParam;
230 UINT uMouseMsg = (UINT) lParam;
232 if (uMouseMsg == WM_RBUTTONDOWN)
235 HMENU hmenu = GetSubMenu(g_hmenuTray,0);
237 SetForegroundWindow(g_hwndLogFrame);
238 TrackPopupMenu(hmenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, g_hwndLogFrame, NULL);
239 PostMessage(g_hwndLogFrame, WM_NULL, 0, 0 ) ;
241 else if (uMouseMsg == WM_LBUTTONDBLCLK)
253 return DefWindowProc(hwnd, msg, wParam, lParam);