ReactOS 0.4.15-dev-7788-g1ad9096
taskbar.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2003, 2004, 2005 Martin Fuchs
3 *
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.
8 *
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.
13 *
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
17 */
18
19
20 //
21 // Explorer clone
22 //
23 // taskbar.cpp
24 //
25 // Martin Fuchs, 16.08.2003
26 //
27
28
29#include <precomp.h>
30
31#include "taskbar.h"
32#include "traynotify.h" // for NOTIFYAREA_WIDTH_DEF
33
34
35DynamicFct<BOOL (WINAPI*)(HWND hwnd)> g_SetTaskmanWindow(TEXT("user32"), "SetTaskmanWindow");
36DynamicFct<BOOL (WINAPI*)(HWND hwnd)> g_RegisterShellHookWindow(TEXT("user32"), "RegisterShellHookWindow");
37DynamicFct<BOOL (WINAPI*)(HWND hwnd)> g_DeregisterShellHookWindow(TEXT("user32"), "DeregisterShellHookWindow");
38
39/*
40DynamicFct<BOOL (WINAPI*)(HWND hWnd, DWORD dwType)> g_RegisterShellHook(TEXT("shell32"), (LPCSTR)0xb5);
41
42 // constants for RegisterShellHook()
43#define RSH_UNREGISTER 0
44#define RSH_REGISTER 1
45#define RSH_REGISTER_PROGMAN 2
46#define RSH_REGISTER_TASKMAN 3
47*/
48
49
51{
52 _id = 0;
53 _hbmp = 0;
54 _bmp_idx = 0;
55 _used = 0;
56 _btn_idx = 0;
57 _fsState = 0;
58}
59
61{
62 while(!empty()) {
63 iterator it = begin();
64 DeleteBitmap(it->second._hbmp);
65 erase(it);
66 }
67}
68
69
71 : super(hwnd),
73{
75
77
78 SystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(_mmMetrics_org), &_mmMetrics_org, 0);
79
80 // configure the window manager to hide windows when they are minimized
81 // This is neccessary to enable shell hook messages.
83 MINIMIZEDMETRICS _mmMetrics_new = _mmMetrics_org;
84
85 _mmMetrics_new.iArrange |= ARW_HIDE;
86
87 SystemParametersInfo(SPI_SETMINIMIZEDMETRICS, sizeof(_mmMetrics_new), &_mmMetrics_new, 0);
88 }
89}
90
92{
93// if (g_RegisterShellHook)
94// (*g_RegisterShellHook)(_hwnd, RSH_UNREGISTER);
95
97 (*g_DeregisterShellHookWindow)(_hwnd);
98 else
99 KillTimer(_hwnd, 0);
100
102 (*g_SetTaskmanWindow)(0);
103
104 SystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(_mmMetrics_org), &_mmMetrics_org, 0);
105}
106
108{
109 ClientRect clnt(hwndParent);
110
111 int taskbar_pos = 80; // This start position will be adjusted in DesktopBar::Resize().
112
116 taskbar_pos, 0, clnt.right-taskbar_pos-(NOTIFYAREA_WIDTH_DEF+1), clnt.bottom, hwndParent);
117}
118
120{
121 if (super::Init(pcs))
122 return 1;
123
124 /* FIXME: There's an internal padding for non-flat toolbar. Get rid of it somehow. */
128 IDW_TASKTOOLBAR, 0, 0, 0, NULL, 0, 0, 0, 16, 16, sizeof(TBBUTTON));
129
131 //SendMessage(_htoolbar, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_MIXEDBUTTONS);
132 //SendMessage(_htoolbar, TB_SETDRAWTEXTFLAGS, DT_CENTER|DT_VCENTER, DT_CENTER|DT_VCENTER);
133 //SetWindowFont(_htoolbar, GetStockFont(ANSI_VAR_FONT), FALSE);
134 //SendMessage(_htoolbar, TB_SETPADDING, 0, MAKELPARAM(8,8));
135
136 // set metrics for the Taskbar toolbar to enable button spacing
138
139 metrics.cbSize = sizeof(TBMETRICS);
141 metrics.cxBarPad = 0;
142 metrics.cyBarPad = 0;
143 metrics.cxButtonSpacing = 3;
144 metrics.cyButtonSpacing = 3;
145
147
149
150 // register the taskbar window as task manager window to make the following call to RegisterShellHookWindow working
152 (*g_SetTaskmanWindow)(_hwnd);
153
155 LOG(TEXT("Using shell hooks for notification of shell events."));
156
157 (*g_RegisterShellHookWindow)(_hwnd);
158 } else {
159 LOG(TEXT("Shell hooks not available."));
160
161 SetTimer(_hwnd, 0, 200, NULL);
162 }
163
164/* Alternatively we could use the RegisterShellHook() function in SHELL32, but this is not yet implemented in the WINE code.
165 if (g_RegisterShellHook) {
166 (*g_RegisterShellHook)(0, RSH_REGISTER);
167
168 if ((HIWORD(GetVersion())>>14) == W_VER_NT)
169 (*g_RegisterShellHook)(_hwnd, RSH_REGISTER_TASKMAN);
170 else
171 (*g_RegisterShellHook)(_hwnd, RSH_REGISTER);
172 }
173*/
174 Refresh();
175
176 return 0;
177}
178
180{
181 switch(nmsg) {
182 case WM_SIZE:
185 break;
186
187 case WM_TIMER:
188 Refresh();
189 return 0;
190
191 case WM_CONTEXTMENU: {
192 Point pt(lparam);
194
196 break; // avoid displaying context menu for application button _and_ desktop bar at the same time
197
198 goto def;}
199
202
205 break;
206
207 default: def:
208 if (nmsg == WM_SHELLHOOK) {
209 switch(wparam) {
212 case HSHELL_WINDOWACTIVATED:
213 case HSHELL_REDRAW:
214#ifdef HSHELL_FLASH
215 case HSHELL_FLASH:
216#endif
217#ifdef HSHELL_RUDEAPPACTIVATED
219#endif
220 Refresh();
221 break;
222 }
223 } else {
224 return super::WndProc(nmsg, wparam, lparam);
225 }
226 }
227
228 return 0;
229}
230
231int TaskBar::Command(int id, int code)
232{
234
235 if (found != _map.end()) {
236 ActivateApp(found);
237 return 0;
238 }
239
240 return super::Command(id, code);
241}
242
243int TaskBar::Notify(int id, NMHDR* pnmh)
244{
245 if (pnmh->hwndFrom == _htoolbar)
246 switch(pnmh->code) {
247 case NM_RCLICK: {
248 TBBUTTONINFO btninfo;
252
253 btninfo.cbSize = sizeof(TBBUTTONINFO);
254 btninfo.dwMask = TBIF_BYINDEX|TBIF_COMMAND;
255
257
258 if (idx>=0 &&
259 SendMessage(_htoolbar, TB_GETBUTTONINFO, idx, (LPARAM)&btninfo)!=-1 &&
260 (it=_map.find_id(btninfo.idCommand))!=_map.end()) {
261 //TaskBarEntry& entry = it->second;
262
263 ActivateApp(it, false, false); // don't restore minimized windows on right button click
264
265 static DynamicFct<DWORD(STDAPICALLTYPE*)(RESTRICTIONS)> pSHRestricted(TEXT("SHELL32"), "SHRestricted");
266
267 if (pSHRestricted && !(*pSHRestricted)(REST_NOTRAYCONTEXTMENU))
269 }
270 break;}
271
272 default:
273 return super::Notify(id, pnmh);
274 }
275
276 return 0;
277}
278
279
280void TaskBar::ActivateApp(TaskBarMap::iterator it, bool can_minimize, bool can_restore)
281{
282 HWND hwnd = it->first;
283
284 bool minimize_it = can_minimize && !IsIconic(hwnd) &&
286
287 // switch to selected application window
288 if (can_restore && !minimize_it)
289 if (IsIconic(hwnd))
291
292 // In case minimize_it is true, we _have_ to switch to the app before
293 // posting SW_MINIMIZE to be compatible with some applications (e.g. "Sleipnir")
295
296 if (minimize_it) {
299 } else
301
302 Refresh();
303}
304
306{
307 HMENU hmenu = GetSystemMenu(it->first, FALSE);
308
309 if (hmenu) {
310 POINT pt;
311
314
315 if (cmd) {
316 ActivateApp(it, false, false); // reactivate window after the context menu has closed
317 PostMessage(it->first, WM_SYSCOMMAND, cmd, 0);
318 }
319 }
320}
321
322
324{
325 HICON hIcon = 0;
326
327 SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon);
328
329 if (!hIcon)
331
332 if (!hIcon)
334
335 if (!hIcon)
337
338 if (!hIcon)
340
341 if (!hIcon)
343
344 return hIcon;
345}
346
347HICON get_window_icon_big(HWND hwnd, bool allow_from_class)
348{
349 HICON hIcon = 0;
350
352
353 if (!hIcon)
354 SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon);
355
356 if (!hIcon)
358
359 if (allow_from_class) {
360 if (!hIcon)
362
363 if (!hIcon)
365 }
366
367 if (!hIcon)
369
370 return hIcon;
371}
372
373 // fill task bar with buttons for enumerated top level windows
375{
376 TaskBar* pThis = (TaskBar*)lparam;
377
379 DWORD ex_style = GetWindowExStyle(hwnd);
380
381 if ((style&WS_VISIBLE) && !(ex_style&WS_EX_TOOLWINDOW) &&
384
386 title[0] = '\0';
387
388 TaskBarMap::iterator found = pThis->_map.find(hwnd);
389 int last_id = 0;
390
391 if (found != pThis->_map.end()) {
392 last_id = found->second._id;
393
394 if (!last_id)
395 found->second._id = pThis->_next_id++;
396 } else {
399 BOOL delete_icon = FALSE;
400
401 if (!hIcon) {
403 delete_icon = TRUE;
404 }
405
406 if (hIcon) {
408 if (delete_icon)
409 DestroyIcon(hIcon); // some icons can be freed, some not - so ignore any error return of DestroyIcon()
410 } else
411 hbmp = 0;
412
413 TBADDBITMAP ab = {0, (UINT_PTR)hbmp};
414 int bmp_idx = SendMessage(pThis->_htoolbar, TB_ADDBITMAP, 1, (LPARAM)&ab);
415
417
418 entry._id = pThis->_next_id++;
419 entry._hbmp = hbmp;
420 entry._bmp_idx = bmp_idx;
421 entry._title = title;
422
423 pThis->_map[hwnd] = entry;
424 found = pThis->_map.find(hwnd);
425 }
426
427 TBBUTTON btn = {-2/*I_IMAGENONE*/, 0, TBSTATE_ENABLED/*|TBSTATE_ELLIPSES*/, BTNS_BUTTON, {0, 0}, 0, 0};
428 TaskBarEntry& entry = found->second;
429
430 ++entry._used;
431 btn.idCommand = entry._id;
432
433 HWND foreground = GetForegroundWindow();
434 HWND foreground_owner = GetWindow(foreground, GW_OWNER);
435
436 if (hwnd==foreground || hwnd==foreground_owner) {
438 pThis->_last_foreground_wnd = hwnd;
439 }
440
441 if (!last_id) {
442 // create new toolbar buttons for new windows
443 if (title[0])
444 btn.iString = (INT_PTR)title;
445
446 btn.iBitmap = entry._bmp_idx;
447 entry._btn_idx = SendMessage(pThis->_htoolbar, TB_BUTTONCOUNT, 0, 0);
448
449 SendMessage(pThis->_htoolbar, TB_INSERTBUTTON, entry._btn_idx, (LPARAM)&btn);
450
451 pThis->ResizeButtons();
452 } else {
453 // refresh attributes of existing buttons
454 if (btn.fsState != entry._fsState)
456
457 if (entry._title != title) {
459
460 info.cbSize = sizeof(TBBUTTONINFO);
461 info.dwMask = TBIF_TEXT;
462 info.pszText = title;
463
465
466 entry._title = title;
467 }
468 }
469
470 entry._fsState = btn.fsState;
471
472#ifdef __REACTOS__ // now handled by activating the ARW_HIDE flag with SystemParametersInfo(SPI_SETMINIMIZEDMETRICS)
473 // move minimized windows out of sight
474 if (IsIconic(hwnd)) {
475 RECT rect;
476
478
479 if (rect.bottom > 0)
480 SetWindowPos(hwnd, 0, -32000, -32000, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
481 }
482#endif
483 }
484
485 return TRUE;
486}
487
489{
490 for(TaskBarMap::iterator it=_map.begin(); it!=_map.end(); ++it)
491 it->second._used = 0;
492
494 //EnumDesktopWindows(GetThreadDesktop(GetCurrentThreadId()), EnumWndProc, (LPARAM)_htoolbar);
495
496 set<int> btn_idx_to_delete;
497 set<HBITMAP> hbmp_to_delete;
498
499 for(TaskBarMap::iterator it=_map.begin(); it!=_map.end(); ++it) {
500 TaskBarEntry& entry = it->second;
501
502 if (!entry._used && entry._id) {
503 // store button indexes to remove
504 btn_idx_to_delete.insert(entry._btn_idx);
505 hbmp_to_delete.insert(entry._hbmp);
506 entry._id = 0;
507 }
508 }
509
510 if (!btn_idx_to_delete.empty()) {
511 // remove buttons from right to left
512 for(set<int>::reverse_iterator it=btn_idx_to_delete.rbegin(); it!=btn_idx_to_delete.rend(); ++it) {
513 int idx = *it;
514
516 MessageBoxW(NULL, L"failed to delete button", NULL, MB_OK);
517
518
519 for(TaskBarMap::iterator it2=_map.begin(); it2!=_map.end(); ++it2) {
520 TaskBarEntry& entry = it2->second;
521
522 // adjust button indexes
523 if (entry._btn_idx > idx) {
524 --entry._btn_idx;
525#if 0
526 --entry._bmp_idx;
527
529
530 info.cbSize = sizeof(TBBUTTONINFO);
531 info.dwMask = TBIF_IMAGE;
532 info.iImage = entry._bmp_idx;
533
535 MessageBoxW(NULL, L"failed to set button info", NULL, MB_OK);
536#endif
537 }
538 }
539
540 }
541
542 for(set<HBITMAP>::iterator it=hbmp_to_delete.begin(); it!=hbmp_to_delete.end(); ++it) {
543 HBITMAP hbmp = *it;
544#if 0
545 TBREPLACEBITMAP tbrepl = {0, (UINT_PTR)hbmp, 0, 0};
547#endif
549
550 for(TaskBarMap::iterator it=_map.begin(); it!=_map.end(); ++it)
551 if (it->second._hbmp == hbmp) {
552 _map.erase(it);
553 break;
554 }
555 }
556
558 }
559}
560
562{
563 for(iterator it=begin(); it!=end(); ++it)
564 if (it->second._id == id)
565 return it;
566
567 return end();
568}
569
571{
572 int btns = _map.size();
573
574 if (btns > 0) {
575 int bar_width = ClientRect(_hwnd).right;
576 int btn_width = (bar_width / btns) - 3;
577
578 if (btn_width < TASKBUTTONWIDTH_MIN)
579 btn_width = TASKBUTTONWIDTH_MIN;
580 else if (btn_width > TASKBUTTONWIDTH_MAX)
581 btn_width = TASKBUTTONWIDTH_MAX;
582
583 if (btn_width != _last_btn_width) {
584 _last_btn_width = btn_width;
585
586 SendMessage(_htoolbar, TB_SETBUTTONWIDTH, 0, MAKELONG(btn_width,btn_width));
588 }
589 }
590}
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
Arabic default style
Definition: afstyles.h:94
ULONG_PTR * PDWORD_PTR
Definition: basetsd.h:182
HBITMAP hbmp
_STLP_TEMPLATE_FOR_CONT_EXT iterator find(const _KT &__x)
Definition: _map.h:210
iterator end()
Definition: _map.h:165
_Rep_type::iterator iterator
Definition: _map.h:85
size_type size() const
Definition: _map.h:172
bool empty() const
Definition: _map.h:171
iterator begin()
Definition: _map.h:163
void erase(iterator __pos)
Definition: _map.h:203
Definition: _set.h:50
_Rep_type::reverse_iterator reverse_iterator
Definition: _set.h:75
bool empty() const
Definition: _set.h:159
iterator end()
Definition: _set.h:152
iterator begin()
Definition: _set.h:151
pair< iterator, bool > insert(const value_type &__x)
Definition: _set.h:168
reverse_iterator rbegin()
Definition: _set.h:155
reverse_iterator rend()
Definition: _set.h:156
_Rep_type::iterator iterator
Definition: _set.h:73
HWND WINAPI CreateToolbarEx(HWND hwnd, DWORD style, UINT wID, INT nBitmaps, HINSTANCE hBMInst, UINT_PTR wBMID, LPCTBBUTTON lpButtons, INT iNumButtons, INT dxButton, INT dyButton, INT dxBitmap, INT dyBitmap, UINT uStructSize)
Definition: commctrl.c:929
static HWND hwndParent
Definition: cryptui.c:300
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
HANDLE HWND
Definition: compat.h:19
#define CALLBACK
Definition: compat.h:35
#define pt(x, y)
Definition: drawing.c:79
#define STDAPICALLTYPE
Definition: guid.c:3
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
uint32_t entry
Definition: isohybrid.c:63
#define TEXT(s)
Definition: k32.h:26
HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd)
create a bitmap from an icon
Definition: explorer.cpp:332
HICON get_window_icon_small(HWND hwnd)
retrieve icon from window
Definition: taskbar.cpp:323
#define BUFFER_LEN
Definition: utility.h:97
#define LOG(txt)
Definition: utility.h:102
#define WINMSG_SHELLHOOK
Definition: window.h:988
#define WINDOW_CREATOR(WND_CLASS)
Definition: window.h:202
UCHAR ab[sizeof("Hello World!") -1]
Definition: fdi.c:106
static HBITMAP
Definition: button.c:44
static HICON
Definition: imagelist.c:84
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HICON hIcon
Definition: msconfig.c:44
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
#define L(x)
Definition: ntvdm.h:50
#define WS_CHILD
Definition: pedump.c:617
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
static char title[]
Definition: ps.c:92
#define TB_INSERTBUTTON
Definition: commctrl.h:1270
#define BTNS_BUTTON
Definition: commctrl.h:998
#define TB_AUTOSIZE
Definition: commctrl.h:1137
#define TBSTATE_PRESSED
Definition: commctrl.h:973
#define TBIF_IMAGE
Definition: commctrl.h:1219
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:989
#define TB_DELETEBUTTON
Definition: commctrl.h:1108
#define TBBUTTONINFO
Definition: commctrl.h:1254
#define TB_SETSTATE
Definition: commctrl.h:1054
#define TB_GETBUTTONINFO
Definition: commctrl.h:1262
#define TBSTYLE_LIST
Definition: commctrl.h:993
#define TB_REPLACEBITMAP
Definition: commctrl.h:1148
#define TB_SETMETRICS
Definition: commctrl.h:1303
#define CCS_NODIVIDER
Definition: commctrl.h:2248
#define CCS_TOP
Definition: commctrl.h:2242
#define TBMF_BUTTONSPACING
Definition: commctrl.h:1289
#define TBIF_BYINDEX
Definition: commctrl.h:1226
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define NM_RCLICK
Definition: commctrl.h:133
#define TBIF_TEXT
Definition: commctrl.h:1220
#define CCS_NORESIZE
Definition: commctrl.h:2245
#define TB_SETBUTTONINFO
Definition: commctrl.h:1263
#define TB_HITTEST
Definition: commctrl.h:1268
#define TB_SETBUTTONWIDTH
Definition: commctrl.h:1161
#define TBSTYLE_WRAPABLE
Definition: commctrl.h:990
#define TBMF_BARPAD
Definition: commctrl.h:1288
#define TB_BUTTONCOUNT
Definition: commctrl.h:1110
#define TBIF_COMMAND
Definition: commctrl.h:1224
#define TBSTATE_CHECKED
Definition: commctrl.h:972
#define TB_ADDBITMAP
Definition: commctrl.h:1056
#define WM_CONTEXTMENU
Definition: richedit.h:64
RESTRICTIONS
Definition: shlobj.h:1626
@ REST_NOTRAYCONTEXTMENU
Definition: shlobj.h:1653
& rect
Definition: startmenu.cpp:1413
window class with gray background color
Definition: window.h:249
internal task bar button management entry
Definition: taskbar.h:51
HBITMAP _hbmp
Definition: taskbar.h:55
int _bmp_idx
Definition: taskbar.h:56
BYTE _fsState
Definition: taskbar.h:60
int _used
Definition: taskbar.h:57
int _btn_idx
Definition: taskbar.h:58
iterator find_id(int id)
Definition: taskbar.cpp:561
~TaskBarMap()
Definition: taskbar.cpp:60
Taskbar window.
Definition: taskbar.h:74
void ActivateApp(TaskBarMap::iterator it, bool can_minimize=true, bool can_restore=true)
Definition: taskbar.cpp:280
int _last_btn_width
Definition: taskbar.h:87
WindowHandle _htoolbar
Definition: taskbar.h:83
static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lparam)
Definition: taskbar.cpp:374
WindowHandle _last_foreground_wnd
Definition: taskbar.h:86
int Command(int id, int code)
Definition: taskbar.cpp:231
void ResizeButtons()
Definition: taskbar.cpp:570
LRESULT Init(LPCREATESTRUCT pcs)
Definition: taskbar.cpp:119
int _next_id
Definition: taskbar.h:85
TaskBarMap _map
Definition: taskbar.h:84
void ShowAppSystemMenu(TaskBarMap::iterator it)
Definition: taskbar.cpp:305
const UINT WM_SHELLHOOK
Definition: taskbar.h:90
TaskBar(HWND hwnd)
Definition: taskbar.cpp:70
MINIMIZEDMETRICS _mmMetrics_org
Definition: taskbar.h:88
~TaskBar()
Definition: taskbar.cpp:91
static HWND Create(HWND hwndParent)
Definition: taskbar.cpp:107
void Refresh()
Definition: taskbar.cpp:488
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Definition: taskbar.cpp:179
int Notify(int id, NMHDR *pnmh)
Definition: taskbar.cpp:243
Definition: window.c:28
virtual LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Definition: window.cpp:280
static HWND Create(CREATORFUNC creator, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
Definition: window.cpp:87
virtual int Command(int id, int code)
Definition: window.cpp:285
virtual LRESULT Init(LPCREATESTRUCT pcs)
Definition: window.cpp:241
virtual int Notify(int id, NMHDR *pnmh)
Definition: window.cpp:290
BYTE fsState
Definition: commctrl.h:951
INT_PTR iString
Definition: commctrl.h:959
int idCommand
Definition: commctrl.h:950
int iBitmap
Definition: commctrl.h:949
Definition: ftp_var.h:139
Definition: inflate.c:139
UINT code
Definition: winuser.h:3159
HWND hwndFrom
Definition: winuser.h:3157
HICON get_window_icon_big(HWND hwnd, bool allow_from_class)
Definition: taskbar.cpp:347
DynamicFct< BOOL(WINAPI *)(HWND hwnd)> g_SetTaskmanWindow(TEXT("user32"), "SetTaskmanWindow")
DynamicFct< BOOL(WINAPI *)(HWND hwnd)> g_DeregisterShellHookWindow(TEXT("user32"), "DeregisterShellHookWindow")
DynamicFct< BOOL(WINAPI *)(HWND hwnd)> g_RegisterShellHookWindow(TEXT("user32"), "RegisterShellHookWindow")
HICON get_window_icon_small(HWND hwnd)
retrieve icon from window
Definition: taskbar.cpp:323
#define CLASSNAME_TASKBAR
Definition: taskbar.h:32
#define TASKBUTTONWIDTH_MIN
Definition: taskbar.h:39
#define TASKBUTTONWIDTH_MAX
Definition: taskbar.h:40
#define PM_GET_LAST_ACTIVE
Definition: taskbar.h:46
#define IDW_TASKTOOLBAR
Definition: taskbar.h:43
#define IDC_FIRST_APP
Definition: taskbar.h:35
#define TITLE_TASKBAR
Definition: taskbar.h:33
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
#define NOTIFYAREA_WIDTH_DEF
Definition: traynotify.h:34
int32_t INT_PTR
Definition: typedefs.h:64
#define MAKELONG(a, b)
Definition: typedefs.h:249
static HMENU hmenu
Definition: win.c:66
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define DeleteBitmap(hbm)
Definition: windowsx.h:76
#define GetWindowExStyle(hwnd)
Definition: windowsx.h:310
#define GetWindowStyle(hwnd)
Definition: windowsx.h:315
#define ARW_HIDE
Definition: winuser.h:1076
#define GW_OWNER
Definition: winuser.h:766
#define SendMessageTimeout
Definition: winuser.h:5845
#define HSHELL_RUDEAPPACTIVATED
Definition: winuser.h:1281
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define WM_SYSCOMMAND
Definition: winuser.h:1741
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
#define HSHELL_WINDOWDESTROYED
Definition: winuser.h:1256
#define TPM_RIGHTBUTTON
Definition: winuser.h:2380
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define HSHELL_WINDOWCREATED
Definition: winuser.h:1255
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WM_SIZE
Definition: winuser.h:1611
HBRUSH WINAPI GetSysColorBrush(_In_ int)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2670
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define SWP_NOSIZE
Definition: winuser.h:1245
#define GetClassLongPtr
Definition: winuser.h:5782
HMENU WINAPI GetSystemMenu(_In_ HWND, _In_ BOOL)
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
#define WM_QUERYDRAGICON
Definition: winuser.h:1654
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define GCL_HICONSM
Definition: winuser.h:667
BOOL WINAPI IsIconic(_In_ HWND)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define IDI_APPLICATION
Definition: winuser.h:704
#define SC_MINIMIZE
Definition: winuser.h:2586
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
#define RegisterWindowMessage
Definition: winuser.h:5840
struct tagMINIMIZEDMETRICS MINIMIZEDMETRICS
#define WM_TIMER
Definition: winuser.h:1742
#define LoadIcon
Definition: winuser.h:5813
#define SendMessage
Definition: winuser.h:5843
#define HSHELL_FLASH
Definition: winuser.h:1280
#define TPM_LEFTBUTTON
Definition: winuser.h:2379
#define MB_OK
Definition: winuser.h:790
#define GetWindowText
Definition: winuser.h:5798
#define PostMessage
Definition: winuser.h:5832
HWND WINAPI GetParent(_In_ HWND)
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1223
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define SWP_NOZORDER
Definition: winuser.h:1247
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SystemParametersInfo
Definition: winuser.h:5858
#define GCL_HICON
Definition: winuser.h:666
#define SC_RESTORE
Definition: winuser.h:2598
#define COLOR_BTNFACE
Definition: winuser.h:928
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2053
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
char TCHAR
Definition: xmlstorage.h:189