2 * Copyright 2003, 2004 Martin Fuchs
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 // Explorer and Desktop clone
25 // Martin Fuchs, 22.08.2003
29 #define CLASSNAME_EXPLORERBAR TEXT("Shell_TrayWnd")
30 #define TITLE_EXPLORERBAR TEXT("") // use an empty window title, so windows taskmanager does not show the window in its application list
33 #define DESKTOPBARBAR_HEIGHT (GetSystemMetrics(SM_CYSIZE) + 5 * GetSystemMetrics(SM_CYEDGE))
34 #define REBARBAND_HEIGHT (GetSystemMetrics(SM_CYSIZE) + 2 * GetSystemMetrics(SM_CYEDGE))
37 #define IDC_START 0x1000
38 #define IDC_LOGOFF 0x1001
39 #define IDC_SHUTDOWN 0x1002
40 #define IDC_LAUNCH 0x1003
41 #define IDC_START_HELP 0x1004
42 #define IDC_SEARCH_FILES 0x1005
43 #define IDC_SEARCH_COMPUTER 0x1006
44 #define IDC_SETTINGS 0x1007
45 #define IDC_ADMIN 0x1008
46 #define IDC_DOCUMENTS 0x1009
47 #define IDC_RECENT 0x100A
48 #define IDC_FAVORITES 0x100B
49 #define IDC_PROGRAMS 0x100C
50 #define IDC_EXPLORE 0x100D
51 #define IDC_NETWORK 0x100E
52 #define IDC_CONNECTIONS 0x100F
53 #define IDC_DRIVES 0x1010
54 #define IDC_CONTROL_PANEL 0x1011
55 #define IDC_SETTINGS_MENU 0x1012
56 #define IDC_PRINTERS 0x1013
57 #define IDC_PRINTERS_MENU 0x1014
58 #define IDC_BROWSE 0x1015
59 #define IDC_SEARCH_PROGRAM 0x1016
60 #define IDC_SEARCH 0x1017
61 #define IDC_TERMINATE 0x1018
62 #define IDC_RESTART 0x1019
64 #define IDC_FIRST_MENU 0x3000
67 #define IDHK_EXPLORER 0
69 #define IDHK_DESKTOP 2
71 #define IDHK_STARTMENU 4
73 /// desktop bar window, also known as "system tray"
74 struct DesktopBar
: public
76 TrayIconControllerTemplate
<
77 OwnerDrawParent
<Window
> >
79 OwnerDrawParent
<Window
>
83 typedef TrayIconControllerTemplate
<
84 OwnerDrawParent
<Window
> > super
;
86 typedef OwnerDrawParent
<Window
> super
;
89 DesktopBar(HWND hwnd
);
98 LRESULT
Init(LPCREATESTRUCT pcs
);
99 LRESULT
WndProc(UINT nmsg
, WPARAM wparam
, LPARAM lparam
);
100 int Notify(int id
, NMHDR
* pnmh
);
101 int Command(int id
, int code
);
103 void Resize(int cx
, int cy
);
104 void ControlResize(WPARAM wparam
, LPARAM lparam
);
105 void RegisterHotkeys();
106 void ProcessHotKey(int id_hotkey
);
107 void ShowOrHideStartMenu();
108 LRESULT
ProcessCopyData(COPYDATASTRUCT
* pcd
);
110 WindowHandle _hwndTaskBar
;
111 WindowHandle _hwndNotify
;
112 WindowHandle _hwndQuickLaunch
;
113 WindowHandle _hwndrebar
;
114 /* Needed to make the StartButton pushed, if it's called by windowskey: SC_TASKLIST command */
115 WindowHandle _hwndStartButton
;
117 struct StartMenuRoot
* _startMenuRoot
;
123 virtual void TrayClick(UINT id
, int btn
);
124 virtual void TrayDblClick(UINT id
, int btn
);
126 const UINT WM_TASKBARCREATED
;
131 /// special "Start" button with one click activation
132 struct StartButton
: public PictureButton
134 typedef PictureButton super
;
136 StartButton(HWND hwnd
);
139 LRESULT
WndProc(UINT nmsg
, WPARAM wparam
, LPARAM lparam
);