ReactOS 0.4.15-dev-8434-g155a7c7
traywnd.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
5 * Copyright 2018-2022 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 *
7 * this library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * this library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#include "precomp.h"
23#include <commoncontrols.h>
24
25HRESULT TrayWindowCtxMenuCreator(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
27void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam);
28
29#define WM_APP_TRAYDESTROY (WM_APP + 0x100)
30
31#define TIMER_ID_AUTOHIDE 1
32#define TIMER_ID_MOUSETRACK 2
33#define MOUSETRACK_INTERVAL 100
34#define AUTOHIDE_DELAY_HIDE 2000
35#define AUTOHIDE_DELAY_SHOW 50
36#define AUTOHIDE_INTERVAL_ANIMATING 10
37
38#define AUTOHIDE_SPEED_SHOW 10
39#define AUTOHIDE_SPEED_HIDE 1
40
41#define AUTOHIDE_HIDDEN 0
42#define AUTOHIDE_SHOWING 1
43#define AUTOHIDE_SHOWN 2
44#define AUTOHIDE_HIDING 3
45
46#define IDHK_RUN 0x1f4
47#define IDHK_MINIMIZE_ALL 0x1f5
48#define IDHK_RESTORE_ALL 0x1f6
49#define IDHK_HELP 0x1f7
50#define IDHK_EXPLORE 0x1f8
51#define IDHK_FIND 0x1f9
52#define IDHK_FIND_COMPUTER 0x1fa
53#define IDHK_NEXT_TASK 0x1fb
54#define IDHK_PREV_TASK 0x1fc
55#define IDHK_SYS_PROPERTIES 0x1fd
56#define IDHK_DESKTOP 0x1fe
57#define IDHK_PAGER 0x1ff
58
59static const WCHAR szTrayWndClass[] = L"Shell_TrayWnd";
60
62
64{
67};
69
71{
72 WINDOWPOSBACKUPDATA wposdata;
73 HWND hDesk = GetDesktopWindow();
74 if (IsWindowVisible(hwnd) && !IsIconic(hwnd) && (hwnd != hDesk))
75 {
76 wposdata.hwnd = hwnd;
77 wposdata.wplt.length = sizeof(wposdata.wplt);
78 GetWindowPlacement(hwnd, &(wposdata.wplt));
79 g_WindowPosBackup.Add(wposdata);
80 }
81
82 return TRUE;
83}
84
86{
88}
89
91{
93
94 for (INT i = g_WindowPosBackup.GetSize() - 1; i >= 0; --i)
95 {
97 }
98
99 g_WindowPosBackup.RemoveAll();
100}
101
103{
106 {
108 return TRUE;
109
111 if (!(exstyle & WS_EX_TOPMOST))
112 return TRUE;
113 }
114 return FALSE;
115}
116
118{
124};
125
126static BOOL CALLBACK
128{
130
131 if (!CanBeMinimized(hwnd))
132 return TRUE; // continue
133
134 if (pei->hTrayWnd == hwnd || pei->hwndDesktop == hwnd ||
135 pei->hwndProgman == hwnd)
136 {
137 return TRUE; // continue
138 }
139
140 if (pei->bMustBeInMonitor)
141 {
142 // is the window in the nearest monitor?
143 HMONITOR hMon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
144 if (hMon)
145 {
147 ZeroMemory(&info, sizeof(info));
148 info.cbSize = sizeof(info);
149 if (GetMonitorInfoW(hMon, &info))
150 {
151 RECT rcWindow, rcMonitor, rcIntersect;
152 rcMonitor = info.rcMonitor;
153
154 GetWindowRect(hwnd, &rcWindow);
155
156 if (!IntersectRect(&rcIntersect, &rcMonitor, &rcWindow))
157 return TRUE; // continue
158 }
159 }
160 }
161
162 pei->hwndFound = hwnd;
163 return FALSE; // stop if found
164}
165
166static BOOL
168{
170 ei.hwndFound = NULL;
172 ei.hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
173 ei.hwndProgman = FindWindowW(L"Progman", NULL);
174 ei.bMustBeInMonitor = bMustBeInMonitor;
175
177 return ei.hwndFound != NULL;
178}
179
180/* Minimized window position info */
182{
185};
187
188/*
189 * ITrayWindow
190 */
191
192const GUID IID_IShellDesktopTray = { 0x213e2df9, 0x9a14, 0x4328, { 0x99, 0xb1, 0x69, 0x61, 0xf9, 0x14, 0x3c, 0xe9 } };
193
195 : public CWindowImpl<CStartButton>
196{
200
201public:
203 : m_ImageList(NULL),
204 m_Font(NULL)
205 {
206 m_Size.cx = 0;
207 m_Size.cy = 0;
208 }
209
211 {
212 if (m_ImageList != NULL)
214
215 if (m_Font != NULL)
217 }
218
220 {
221 return m_Size;
222 }
223
225 {
226 SIZE Size = { 0, 0 };
227
228 if (m_ImageList == NULL ||
230 {
232 }
233
235
236 /* Save the size of the start button */
237 m_Size = Size;
238 }
239
241 {
242 /* Get the system fonts, we use the caption font, always bold, though. */
243 NONCLIENTMETRICS ncm = {sizeof(ncm)};
244 if (!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, FALSE))
245 return;
246
247 if (m_Font)
249
250 ncm.lfCaptionFont.lfWeight = FW_BOLD;
251 m_Font = CreateFontIndirect(&ncm.lfCaptionFont);
252
254 }
255
257 {
258 // HACK & FIXME: CORE-18016
259 HWND hWnd = m_hWnd;
260 m_hWnd = NULL;
262
263 SetWindowTheme(m_hWnd, L"Start", NULL);
264
267 0, 0, 0,
270
273 UpdateSize();
274 }
275
277 {
278 WCHAR szStartCaption[32];
280 IDS_START,
281 szStartCaption,
282 _countof(szStartCaption)))
283 {
284 wcscpy(szStartCaption, L"Start");
285 }
286
288
289 // HACK & FIXME: CORE-18016
291 0,
292 WC_BUTTON,
293 szStartCaption,
294 dwStyle,
295 0, 0, 0, 0,
299 NULL);
300
301 if (m_hWnd)
302 Initialize();
303
304 return m_hWnd;
305 }
306
308 {
309 if (uMsg == WM_KEYUP && wParam != VK_SPACE)
310 return 0;
311
313 return 0;
314 }
315
319
320};
321
323 public CComCoClass<CTrayWindow>,
324 public CComObjectRootEx<CComMultiThreadModelNoCS>,
325 public CWindowImpl < CTrayWindow, CWindow, CControlWinTraits >,
326 public ITrayWindow,
327 public IShellDesktopTray,
328 public IOleWindow,
329 public IContextMenu
330{
333
336
340
342
347
349
355
358
361
365
367
368public:
370
371 union
372 {
374 struct
375 {
376 /* UI Status */
381 };
382 };
383
384public:
388 m_Theme(NULL),
389 m_Font(NULL),
391 m_Rebar(NULL),
394 m_Position(0),
403 Flags(0)
404 {
410 }
411
412 virtual ~CTrayWindow()
413 {
414 if (m_ShellServices != NULL)
415 {
418 }
419
420 if (m_Font != NULL)
421 {
423 m_Font = NULL;
424 }
425
426 if (m_Theme)
427 {
429 m_Theme = NULL;
430 }
431
433 }
434
435
436
437
438
439 /**********************************************************
440 * ##### command handling #####
441 */
442
444 {
445 WCHAR szCommand[256];
446 WCHAR *pszParameters;
447
449 id,
450 szCommand,
451 _countof(szCommand)))
452 {
453 return E_FAIL;
454 }
455
456 pszParameters = wcschr(szCommand, L'>');
457 if (pszParameters)
458 {
459 *pszParameters = 0;
460 pszParameters++;
461 }
462
463 ShellExecuteW(m_hWnd, NULL, szCommand, pszParameters, NULL, SW_SHOWNORMAL);
464 return S_OK;
465 }
466
468 {
470 return;
471
473 }
474
476 {
477 SaveState();
478
479 /* Display the ReactOS Shutdown Dialog */
481
482 /*
483 * If the user presses CTRL+ALT+SHIFT while exiting
484 * the shutdown dialog, exit the shell cleanly.
485 */
486 if ((GetKeyState(VK_CONTROL) & 0x8000) &&
487 (GetKeyState(VK_SHIFT) & 0x8000) &&
488 (GetKeyState(VK_MENU) & 0x8000))
489 {
490 PostMessage(WM_QUIT, 0, 0);
491 }
492 return 0;
493 }
494
496 {
497 HWND hwnd;
498 RECT posRect;
499
501
503 WC_STATIC,
504 NULL,
506 posRect.left,
507 posRect.top,
508 posRect.right - posRect.left,
509 posRect.bottom - posRect.top,
510 NULL,
511 NULL,
512 NULL,
513 NULL);
514
516
517 // build the default directory from two environment variables
518 CStringW strDefaultDir, strHomePath;
519 strDefaultDir.GetEnvironmentVariable(L"HOMEDRIVE");
520 strHomePath.GetEnvironmentVariable(L"HOMEPATH");
521 strDefaultDir += strHomePath;
522
524
527
528 return 0;
529 }
530
532 {
533 CTrayWindow * This = (CTrayWindow*) pParam;
534 return This->RunFileDlgThread();
535 }
536
538 {
539 HWND hRunDlg;
541 {
543 if (hRunDlg != NULL &&
544 hRunDlg != m_RunFileDlgOwner)
545 {
546 SetForegroundWindow(hRunDlg);
547 return;
548 }
549 }
550
552 }
553
555 {
556 HWND hwnd;
557 RECT posRect;
558
561 WC_STATIC,
562 NULL,
564 posRect.left,
565 posRect.top,
566 posRect.right - posRect.left,
567 posRect.bottom - posRect.top,
568 NULL,
569 NULL,
570 NULL,
571 NULL);
572
574
576
579
580 return 0;
581 }
582
584 {
585 CTrayWindow *This = (CTrayWindow*) pParam;
586
587 return This->TrayPropertiesThread();
588 }
589
591 {
592 HWND hTrayProp;
593
595 {
597 if (hTrayProp != NULL &&
598 hTrayProp != m_TrayPropertiesOwner)
599 {
600 SetForegroundWindow(hTrayProp);
601 return NULL;
602 }
603 }
604
606 return NULL;
607 }
608
610 {
611 WCHAR szDir[MAX_PATH];
612
613 if (SHGetSpecialFolderPath(hWndOwner,
614 szDir,
616 FALSE))
617 {
618 ShellExecute(hWndOwner,
619 lpOperation,
620 szDir,
621 NULL,
622 NULL,
624 }
625 }
626
628 {
629 ShellExecute(hWndOwner,
630 TEXT("open"),
631 TEXT("taskmgr.exe"),
632 NULL,
633 NULL,
635 }
636
638 {
640 {
641 ShowDesktop();
642 }
643 else
644 {
645 RestoreAll();
646 }
647 }
648
650 {
651 switch (uiCmd)
652 {
655 break;
656
659 TEXT("open"));
660 break;
661
664 TEXT("explore"));
665 break;
666
667 case ID_LOCKTASKBAR:
669 break;
670
673 break;
674
677 break;
678
680 ShowDesktop();
681 break;
682
685 if (g_Arrangement == NONE)
686 {
688 }
692 break;
693
696 if (g_Arrangement == NONE)
697 {
699 }
703 break;
704
707 if (g_Arrangement == NONE)
708 {
710 }
714 break;
715
718 break;
719
721 //FIXME: Use SHRunControlPanel
722 ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
723 break;
724
726 RestoreAll();
727 break;
728
729 default:
730 TRACE("ITrayWindow::ExecContextMenuCmd(%u): Unhandled Command ID!\n", uiCmd);
731 return FALSE;
732 }
733
734 return TRUE;
735 }
736
738 {
739 m_StartMenuPopup->OnSelect(MPOS_CANCELLEVEL);
740 }
741
743 {
744 switch (id)
745 {
746 case IDHK_RUN:
749 break;
750 case IDHK_HELP:
752 break;
753 case IDHK_EXPLORE:
754 //FIXME: We don't support this yet:
755 //ShellExecuteW(0, L"explore", NULL, NULL, NULL, 1);
756 ShellExecuteW(0, NULL, L"explorer.exe", L"/e ,", NULL, 1);
757 break;
758 case IDHK_FIND:
760 break;
763 break;
765 //FIXME: Use SHRunControlPanel
766 ShellExecuteW(m_hWnd, NULL, L"sysdm.cpl", NULL, NULL, SW_NORMAL);
767 break;
768 case IDHK_NEXT_TASK:
769 break;
770 case IDHK_PREV_TASK:
771 break;
773 MinimizeAll();
774 break;
775 case IDHK_RESTORE_ALL:
776 RestoreAll();
777 break;
778 case IDHK_DESKTOP:
780 break;
781 case IDHK_PAGER:
782 break;
783 }
784
785 return 0;
786 }
787
789 {
790 switch (uCommand)
791 {
793 // TODO:
794 break;
798 break;
800 SaveState();
801 LogoffWindowsDialog(m_hWnd); // FIXME: Maybe handle it in a similar way as DoExitWindows?
802 break;
803 case TRAYCMD_CASCADE:
805 break;
806 case TRAYCMD_TILE_H:
808 break;
809 case TRAYCMD_TILE_V:
811 break;
814 break;
816 ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
817 break;
820 break;
822 MinimizeAll();
823 break;
825 RestoreAll();
826 break;
828 ShowDesktop();
829 break;
832 break;
834 break;
837 {
840 }
841 break;
844 break;
846 // TODO:
847 break;
850 break;
852 // TODO:
853 break;
855 // TODO:
856 break;
858 // TODO:
859 break;
860 case IDM_SEARCH:
863 break;
866 break;
867
868 default:
869 break;
870 }
871
872 return FALSE;
873 }
874
875
877 IN HMENU hMenu,
878 IN POINT *ppt OPTIONAL,
879 IN HWND hwndExclude OPTIONAL,
880 IN BOOL TrackUp,
881 IN BOOL IsContextMenu)
882 {
883 TPMPARAMS tmp, *ptmp = NULL;
884 POINT pt;
885 UINT cmdId;
886 UINT fuFlags;
887
888 if (hwndExclude != NULL)
889 {
890 /* Get the client rectangle and map it to screen coordinates */
891 if (::GetClientRect(hwndExclude,
892 &tmp.rcExclude) &&
893 ::MapWindowPoints(hwndExclude,
894 NULL,
895 (LPPOINT) &tmp.rcExclude,
896 2) != 0)
897 {
898 ptmp = &tmp;
899 }
900 }
901
902 if (ppt == NULL)
903 {
904 if (ptmp == NULL &&
905 GetClientRect(&tmp.rcExclude) &&
907 NULL,
908 (LPPOINT) &tmp.rcExclude,
909 2) != 0)
910 {
911 ptmp = &tmp;
912 }
913
914 if (ptmp != NULL)
915 {
916 /* NOTE: TrackPopupMenuEx will eventually align the track position
917 for us, no need to take care of it here as long as the
918 coordinates are somewhere within the exclusion rectangle */
919 pt.x = ptmp->rcExclude.left;
920 pt.y = ptmp->rcExclude.top;
921 }
922 else
923 pt.x = pt.y = 0;
924 }
925 else
926 pt = *ppt;
927
928 tmp.cbSize = sizeof(tmp);
929
930 fuFlags = TPM_RETURNCMD | TPM_VERTICAL;
931 fuFlags |= (TrackUp ? TPM_BOTTOMALIGN : TPM_TOPALIGN);
932 if (IsContextMenu)
933 fuFlags |= TPM_RIGHTBUTTON;
934 else
935 fuFlags |= (TrackUp ? TPM_VERNEGANIMATION : TPM_VERPOSANIMATION);
936
937 cmdId = TrackPopupMenuEx(hMenu,
938 fuFlags,
939 pt.x,
940 pt.y,
941 m_hWnd,
942 ptmp);
943
944 return cmdId;
945 }
946
948 IN IContextMenu * contextMenu,
949 IN POINT *ppt OPTIONAL,
950 IN HWND hwndExclude OPTIONAL,
951 IN BOOL TrackUp,
953 {
954 POINT pt;
956 RECT rc;
957 HRESULT hr;
958 UINT uCommand;
959 HMENU popup = CreatePopupMenu();
960
961 if (popup == NULL)
962 return E_FAIL;
963
964 if (ppt)
965 {
966 pt = *ppt;
967 }
968 else
969 {
971 pt.x = rc.left;
972 pt.y = rc.top;
973 }
974
975 TRACE("Before Query\n");
976 hr = contextMenu->QueryContextMenu(popup, 0, 0, UINT_MAX, CMF_NORMAL);
978 {
979 TRACE("Query failed\n");
980 DestroyMenu(popup);
981 return hr;
982 }
983
984 TRACE("Before Tracking\n");
986 if (hwndExclude)
987 {
988 ::GetWindowRect(hwndExclude, &rc);
989 ZeroMemory(&params, sizeof(params));
990 params.cbSize = sizeof(params);
991 params.rcExclude = rc;
992 uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, pt.x, pt.y, m_hWnd, &params);
993 }
994 else
995 {
996 uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, pt.x, pt.y, m_hWnd, NULL);
997 }
999
1000 if (uCommand != 0)
1001 {
1002 TRACE("Before InvokeCommand\n");
1003 CMINVOKECOMMANDINFO cmi = { 0 };
1004 cmi.cbSize = sizeof(cmi);
1005 cmi.lpVerb = MAKEINTRESOURCEA(uCommand);
1006 cmi.hwnd = m_hWnd;
1007 hr = contextMenu->InvokeCommand(&cmi);
1008 }
1009 else
1010 {
1011 TRACE("TrackPopupMenu failed. Code=%d, LastError=%d\n", uCommand, GetLastError());
1012 hr = S_FALSE;
1013 }
1014
1015 DestroyMenu(popup);
1016 return hr;
1017 }
1018
1019
1020
1021
1022
1023 /**********************************************************
1024 * ##### moving and sizing handling #####
1025 */
1026
1028 {
1029 /* There is nothing to do if themes are enabled */
1030 if (m_Theme)
1031 return;
1032
1034
1035 NONCLIENTMETRICS ncm = {sizeof(ncm)};
1036 if (!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, FALSE))
1037 {
1038 ERR("SPI_GETNONCLIENTMETRICS failed\n");
1039 return;
1040 }
1041
1042 if (m_Font != NULL)
1044
1045 ncm.lfCaptionFont.lfWeight = FW_NORMAL;
1046 m_Font = CreateFontIndirect(&ncm.lfCaptionFont);
1047 if (!m_Font)
1048 {
1049 ERR("CreateFontIndirect failed\n");
1050 return;
1051 }
1052
1056 }
1057
1059 IN OUT RECT *pRect,
1061 {
1063 HMONITOR hMon;
1064
1065 mi.cbSize = sizeof(mi);
1066 hMon = MonitorFromRect(pRect, dwFlags);
1067 if (hMon != NULL &&
1068 GetMonitorInfo(hMon, &mi))
1069 {
1070 *pRect = mi.rcMonitor;
1071 }
1072 else
1073 {
1074 pRect->left = 0;
1075 pRect->top = 0;
1076 pRect->right = GetSystemMetrics(SM_CXSCREEN);
1077 pRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1078
1079 hMon = NULL;
1080 }
1081
1082 return hMon;
1083 }
1084
1086 IN const RECT *pRect)
1087 {
1088 HMONITOR hMon;
1089
1090 /* In case the monitor sizes or saved sizes differ a bit (probably
1091 not a lot, only so the tray window overlaps into another monitor
1092 now), minimize the risk that we determine a wrong monitor by
1093 using the center point of the tray window if we can't determine
1094 it using the rectangle. */
1095 hMon = MonitorFromRect(pRect, MONITOR_DEFAULTTONULL);
1096 if (hMon == NULL)
1097 {
1098 POINT pt;
1099
1100 pt.x = pRect->left + ((pRect->right - pRect->left) / 2);
1101 pt.y = pRect->top + ((pRect->bottom - pRect->top) / 2);
1102
1103 /* be less error-prone, find the nearest monitor */
1104 hMon = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST);
1105 }
1106
1107 return hMon;
1108 }
1109
1111 IN HMONITOR hMonitor,
1112 IN OUT RECT *pRect)
1113 {
1114 HMONITOR hMon = NULL;
1115
1116 if (hMonitor != NULL)
1117 {
1119
1120 mi.cbSize = sizeof(mi);
1121 if (!GetMonitorInfo(hMonitor, &mi))
1122 {
1123 /* Hm, the monitor is gone? Try to find a monitor where it
1124 could be located now */
1125 hMon = GetMonitorFromRect(pRect);
1126 if (hMon == NULL ||
1127 !GetMonitorInfo(hMon, &mi))
1128 {
1129 hMon = NULL;
1130 goto GetPrimaryRect;
1131 }
1132 }
1133
1134 *pRect = mi.rcMonitor;
1135 }
1136 else
1137 {
1138GetPrimaryRect:
1139 pRect->left = 0;
1140 pRect->top = 0;
1141 pRect->right = GetSystemMetrics(SM_CXSCREEN);
1142 pRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1143 }
1144
1145 return hMon;
1146 }
1147
1149 {
1151 SIZE size;
1152
1153 if (pos > ABE_BOTTOM)
1154 pos = ABE_BOTTOM;
1155
1156 HRESULT hr = GetThemePartSize(m_Theme, NULL, iSizerPart[pos], 0, NULL, TS_TRUE, &size);
1158 return;
1159
1160 switch (pos)
1161 {
1162 case ABE_TOP:
1163 rc->bottom -= size.cy;
1164 break;
1165 case ABE_BOTTOM:
1166 rc->top += size.cy;
1167 break;
1168 case ABE_LEFT:
1169 rc->right -= size.cx;
1170 break;
1171 case ABE_RIGHT:
1172 rc->left += size.cx;
1173 break;
1174 }
1175 }
1176
1178 IN const SIZE *pTraySize,
1179 IN OUT RECT *pRect)
1180 {
1181 switch (Position)
1182 {
1183 case ABE_LEFT:
1184 pRect->right = pRect->left + pTraySize->cx;
1185 break;
1186
1187 case ABE_TOP:
1188 pRect->bottom = pRect->top + pTraySize->cy;
1189 break;
1190
1191 case ABE_RIGHT:
1192 pRect->left = pRect->right - pTraySize->cx;
1193 break;
1194
1195 case ABE_BOTTOM:
1196 default:
1197 pRect->top = pRect->bottom - pTraySize->cy;
1198 break;
1199 }
1200 }
1201
1203 IN const RECT *pScreen,
1204 IN const SIZE *pTraySize OPTIONAL,
1205 OUT RECT *pRect)
1206 {
1207 if (pTraySize == NULL)
1208 pTraySize = &m_TraySize;
1209
1210 *pRect = *pScreen;
1211
1212 if(!m_Theme)
1213 {
1214 /* Move the border outside of the screen */
1215 InflateRect(pRect,
1218 }
1219
1220 MakeTrayRectWithSize(Position, pTraySize, pRect);
1221 }
1222
1224 {
1225 return m_Position == ABE_TOP || m_Position == ABE_BOTTOM;
1226 }
1227
1230 IN OUT RECT *pRect)
1231 {
1232 RECT rcScreen;
1233 //BOOL Horizontal;
1234 HMONITOR hMon;
1235 SIZE szMax, szWnd;
1236
1237 //Horizontal = IsPosHorizontal();
1238
1239 szWnd.cx = pRect->right - pRect->left;
1240 szWnd.cy = pRect->bottom - pRect->top;
1241
1242 rcScreen = *pRect;
1243 hMon = GetScreenRectFromRect(
1244 &rcScreen,
1245 MONITOR_DEFAULTTONEAREST);
1246
1247 /* Calculate the maximum size of the tray window and limit the window
1248 size to half of the screen's size. */
1249 szMax.cx = (rcScreen.right - rcScreen.left) / 2;
1250 szMax.cy = (rcScreen.bottom - rcScreen.top) / 2;
1251 if (szWnd.cx > szMax.cx)
1252 szWnd.cx = szMax.cx;
1253 if (szWnd.cy > szMax.cy)
1254 szWnd.cy = szMax.cy;
1255
1256 /* FIXME - calculate */
1257
1259 &rcScreen,
1260 &szWnd,
1261 pRect);
1262
1263 return hMon;
1264 }
1265
1266#if 0
1267 VOID
1268 GetMinimumWindowSize(
1269 OUT RECT *pRect)
1270 {
1271 RECT rcMin = {0};
1272
1273 AdjustWindowRectEx(&rcMin,
1275 GWL_STYLE),
1276 FALSE,
1278 GWL_EXSTYLE));
1279
1280 *pRect = rcMin;
1281 }
1282#endif
1283
1284
1286 IN POINT pt,
1287 OUT RECT *pRect,
1288 OUT HMONITOR *phMonitor)
1289 {
1290 HMONITOR hMon, hMonNew;
1291 DWORD PosH, PosV, Pos;
1292 SIZE DeltaPt, ScreenOffset;
1293 RECT rcScreen;
1294
1295 rcScreen.left = 0;
1296 rcScreen.top = 0;
1297
1298 /* Determine the screen rectangle */
1299 hMon = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
1300 if (hMon != NULL)
1301 {
1303
1304 mi.cbSize = sizeof(mi);
1305 if (!GetMonitorInfo(hMon, &mi))
1306 {
1307 hMon = NULL;
1308 goto GetPrimaryScreenRect;
1309 }
1310
1311 /* make left top corner of the screen zero based to
1312 make calculations easier */
1313 pt.x -= mi.rcMonitor.left;
1314 pt.y -= mi.rcMonitor.top;
1315
1316 ScreenOffset.cx = mi.rcMonitor.left;
1317 ScreenOffset.cy = mi.rcMonitor.top;
1318 rcScreen.right = mi.rcMonitor.right - mi.rcMonitor.left;
1319 rcScreen.bottom = mi.rcMonitor.bottom - mi.rcMonitor.top;
1320 }
1321 else
1322 {
1323GetPrimaryScreenRect:
1324 ScreenOffset.cx = 0;
1325 ScreenOffset.cy = 0;
1328 }
1329
1330 /* Calculate the nearest screen border */
1331 if (pt.x < rcScreen.right / 2)
1332 {
1333 DeltaPt.cx = pt.x;
1334 PosH = ABE_LEFT;
1335 }
1336 else
1337 {
1338 DeltaPt.cx = rcScreen.right - pt.x;
1339 PosH = ABE_RIGHT;
1340 }
1341
1342 if (pt.y < rcScreen.bottom / 2)
1343 {
1344 DeltaPt.cy = pt.y;
1345 PosV = ABE_TOP;
1346 }
1347 else
1348 {
1349 DeltaPt.cy = rcScreen.bottom - pt.y;
1350 PosV = ABE_BOTTOM;
1351 }
1352
1353 Pos = (DeltaPt.cx * rcScreen.bottom < DeltaPt.cy * rcScreen.right) ? PosH : PosV;
1354
1355 /* Fix the screen origin to be relative to the primary monitor again */
1356 OffsetRect(&rcScreen,
1357 ScreenOffset.cx,
1358 ScreenOffset.cy);
1359
1360 RECT rcPos = m_TrayRects[Pos];
1361
1362 hMonNew = GetMonitorFromRect(&rcPos);
1363 if (hMon != hMonNew)
1364 {
1365 SIZE szTray;
1366
1367 /* Recalculate the rectangle, we're dragging to another monitor.
1368 We don't need to recalculate the rect on single monitor systems. */
1369 szTray.cx = rcPos.right - rcPos.left;
1370 szTray.cy = rcPos.bottom - rcPos.top;
1371
1372 GetTrayRectFromScreenRect(Pos, &rcScreen, &szTray, pRect);
1373 hMon = hMonNew;
1374 }
1375 else
1376 {
1377 /* The user is dragging the tray window on the same monitor. We don't need
1378 to recalculate the rectangle */
1379 *pRect = rcPos;
1380 }
1381
1382 *phMonitor = hMon;
1383
1384 return Pos;
1385 }
1386
1388 IN OUT RECT *pRect,
1389 OUT HMONITOR *phMonitor)
1390 {
1391 POINT pt;
1392
1393 /* Calculate the center of the rectangle. We call
1394 GetDraggingRectFromPt to calculate a valid
1395 dragging rectangle */
1396 pt.x = pRect->left + ((pRect->right - pRect->left) / 2);
1397 pt.y = pRect->top + ((pRect->bottom - pRect->top) / 2);
1398
1399 return GetDraggingRectFromPt(
1400 pt,
1401 pRect,
1402 phMonitor);
1403 }
1404
1406 {
1407 RECT rcTray;
1408
1409 if (IsDragging)
1410 {
1411 rcTray.left = pwp->x;
1412 rcTray.top = pwp->y;
1413 rcTray.right = rcTray.left + pwp->cx;
1414 rcTray.bottom = rcTray.top + pwp->cy;
1415
1416 if (!EqualRect(&rcTray,
1418 {
1419 /* Recalculate the rectangle, the user dragged the tray
1420 window to another monitor or the window was somehow else
1421 moved or resized */
1423 &rcTray,
1425 //m_TrayRects[DraggingPosition] = rcTray;
1426 }
1427
1428 //Monitor = CalculateValidSize(DraggingPosition,
1429 // &rcTray);
1430
1435 IsDragging = FALSE;
1436
1437 m_TrayRects[m_Position] = rcTray;
1438 goto ChangePos;
1439 }
1440 else if (GetWindowRect(&rcTray))
1441 {
1442 if (InSizeMove)
1443 {
1444 if (!(pwp->flags & SWP_NOMOVE))
1445 {
1446 rcTray.left = pwp->x;
1447 rcTray.top = pwp->y;
1448 }
1449
1450 if (!(pwp->flags & SWP_NOSIZE))
1451 {
1452 rcTray.right = rcTray.left + pwp->cx;
1453 rcTray.bottom = rcTray.top + pwp->cy;
1454 }
1455
1457
1458 if (!(pwp->flags & (SWP_NOMOVE | SWP_NOSIZE)))
1459 {
1460 SIZE szWnd;
1461
1462 szWnd.cx = pwp->cx;
1463 szWnd.cy = pwp->cy;
1464
1465 MakeTrayRectWithSize(m_Position, &szWnd, &rcTray);
1466 }
1467
1468 m_TrayRects[m_Position] = rcTray;
1469 }
1470 else if (m_Position != (DWORD)-1)
1471 {
1472 /* If the user isn't resizing the tray window we need to make sure the
1473 new size or position is valid. this is to prevent changes to the window
1474 without user interaction. */
1475 rcTray = m_TrayRects[m_Position];
1476
1478 {
1479 rcTray.left += m_AutoHideOffset.cx;
1480 rcTray.right += m_AutoHideOffset.cx;
1481 rcTray.top += m_AutoHideOffset.cy;
1482 rcTray.bottom += m_AutoHideOffset.cy;
1483 }
1484
1485 }
1486
1487ChangePos:
1488 m_TraySize.cx = rcTray.right - rcTray.left;
1489 m_TraySize.cy = rcTray.bottom - rcTray.top;
1490
1491 pwp->flags &= ~(SWP_NOMOVE | SWP_NOSIZE);
1492 pwp->x = rcTray.left;
1493 pwp->y = rcTray.top;
1494 pwp->cx = m_TraySize.cx;
1495 pwp->cy = m_TraySize.cy;
1496 }
1497 }
1498
1500 {
1501 RECT rcClip, rcWindow;
1502 HRGN hClipRgn;
1503
1504 if (GetWindowRect(&rcWindow))
1505 {
1506 /* Disable clipping on systems with only one monitor */
1508 Clip = FALSE;
1509
1510 if (Clip)
1511 {
1512 rcClip = rcWindow;
1513
1514 GetScreenRect(m_Monitor, &rcClip);
1515
1516 if (!IntersectRect(&rcClip, &rcClip, &rcWindow))
1517 {
1518 rcClip = rcWindow;
1519 }
1520
1521 OffsetRect(&rcClip,
1522 -rcWindow.left,
1523 -rcWindow.top);
1524
1525 hClipRgn = CreateRectRgnIndirect(&rcClip);
1526 }
1527 else
1528 hClipRgn = NULL;
1529
1530 /* Set the clipping region or make sure the window isn't clipped
1531 by disabling it explicitly. */
1532 SetWindowRgn(hClipRgn, TRUE);
1533 }
1534 }
1535
1537 {
1538#if !WIN7_DEBUG_MODE
1539 RECT rcTray, rcWorkArea;
1540
1541 /* If monitor has changed then fix the previous monitors work area */
1543 {
1544 GetScreenRect(m_PreviousMonitor, &rcWorkArea);
1545 SystemParametersInfoW(SPI_SETWORKAREA,
1546 1,
1547 &rcWorkArea,
1549 }
1550
1551 rcTray = m_TrayRects[m_Position];
1552
1553 GetScreenRect(m_Monitor, &rcWorkArea);
1555
1556 /* If AutoHide is false then change the workarea to exclude
1557 the area that the taskbar covers. */
1559 {
1560 switch (m_Position)
1561 {
1562 case ABE_TOP:
1563 rcWorkArea.top = rcTray.bottom;
1564 break;
1565 case ABE_LEFT:
1566 rcWorkArea.left = rcTray.right;
1567 break;
1568 case ABE_RIGHT:
1569 rcWorkArea.right = rcTray.left;
1570 break;
1571 case ABE_BOTTOM:
1572 rcWorkArea.bottom = rcTray.top;
1573 break;
1574 }
1575 }
1576
1577 /*
1578 * Resize the current monitor work area. Win32k will also send
1579 * a WM_SIZE message to automatically resize the desktop.
1580 */
1581 SystemParametersInfoW(SPI_SETWORKAREA,
1582 1,
1583 &rcWorkArea,
1585#endif
1586 }
1587
1589 {
1590 /* Force the rebar bands to resize */
1592 IID_IDeskBand,
1594 0,
1595 NULL,
1596 NULL);
1597
1598 /* Calculate the size of the taskbar based on the rebar */
1600
1601 /* Move the tray window */
1602 /* The handler of WM_WINDOWPOSCHANGING will override whatever size
1603 * and position we use here with m_TrayRects */
1608 }
1609
1611 {
1612 DWORD Pos;
1613 RECT rcScreen;
1614 SIZE WndSize, EdgeSize, DlgFrameSize;
1615 SIZE StartBtnSize = m_StartButton.GetSize();
1616
1617 EdgeSize.cx = GetSystemMetrics(SM_CXEDGE);
1618 EdgeSize.cy = GetSystemMetrics(SM_CYEDGE);
1619 DlgFrameSize.cx = GetSystemMetrics(SM_CXDLGFRAME);
1620 DlgFrameSize.cy = GetSystemMetrics(SM_CYDLGFRAME);
1621
1623 rcScreen = g_TaskbarSettings.sr.Rect;
1624 GetScreenRectFromRect(&rcScreen, MONITOR_DEFAULTTONEAREST);
1625
1627 {
1628 /* Use the minimum size of the taskbar, we'll use the start
1629 button as a minimum for now. Make sure we calculate the
1630 entire window size, not just the client size. However, we
1631 use a thinner border than a standard thick border, so that
1632 the start button and bands are not stuck to the screen border. */
1633 if(!m_Theme)
1634 {
1635 g_TaskbarSettings.sr.Size.cx = StartBtnSize.cx + (2 * (EdgeSize.cx + DlgFrameSize.cx));
1636 g_TaskbarSettings.sr.Size.cy = StartBtnSize.cy + (2 * (EdgeSize.cy + DlgFrameSize.cy));
1637 }
1638 else
1639 {
1640 g_TaskbarSettings.sr.Size.cx = StartBtnSize.cx - EdgeSize.cx;
1641 g_TaskbarSettings.sr.Size.cy = StartBtnSize.cy - EdgeSize.cy;
1644 }
1645 }
1646 /* Determine a minimum tray window rectangle. The "client" height is
1647 zero here since we cannot determine an optimal minimum width when
1648 loaded as a vertical tray window. We just need to make sure the values
1649 loaded from the registry are at least. The windows explorer behaves
1650 the same way, it allows the user to save a zero width vertical tray
1651 window, but not a zero height horizontal tray window. */
1652 if(!m_Theme)
1653 {
1654 WndSize.cx = 2 * (EdgeSize.cx + DlgFrameSize.cx);
1655 WndSize.cy = StartBtnSize.cy + (2 * (EdgeSize.cy + DlgFrameSize.cy));
1656 }
1657 else
1658 {
1659 WndSize.cx = StartBtnSize.cx;
1660 WndSize.cy = StartBtnSize.cy - EdgeSize.cy;
1661 }
1662
1663 if (WndSize.cx < g_TaskbarSettings.sr.Size.cx)
1664 WndSize.cx = g_TaskbarSettings.sr.Size.cx;
1665 if (WndSize.cy < g_TaskbarSettings.sr.Size.cy)
1666 WndSize.cy = g_TaskbarSettings.sr.Size.cy;
1667
1668 /* Save the calculated size */
1669 m_TraySize = WndSize;
1670
1671 /* Calculate all docking rectangles. We need to do this here so they're
1672 initialized and dragging the tray window to another position gives
1673 usable results */
1674 for (Pos = ABE_LEFT; Pos <= ABE_BOTTOM; Pos++)
1675 {
1677 &rcScreen,
1678 &m_TraySize,
1679 &m_TrayRects[Pos]);
1680 // TRACE("m_TrayRects[%d(%d)]: %d,%d,%d,%d\n", Pos, Position, m_TrayRects[Pos].left, m_TrayRects[Pos].top, m_TrayRects[Pos].right, m_TrayRects[Pos].bottom);
1681 }
1682
1683 /* Determine which monitor we are on. It shouldn't matter which docked
1684 position rectangle we use */
1686 }
1687
1689 {
1690 RECT rcClient;
1691 SIZE TraySize, StartSize;
1692 POINT ptTrayNotify = { 0, 0 };
1693 BOOL Horizontal;
1694 HDWP dwp;
1695
1697 if (prcClient != NULL)
1698 {
1699 rcClient = *prcClient;
1700 }
1701 else
1702 {
1703 if (!GetClientRect(&rcClient))
1704 {
1705 ERR("Could not get client rect lastErr=%d\n", GetLastError());
1706 return;
1707 }
1708 }
1709
1710 Horizontal = IsPosHorizontal();
1711
1712 /* We're about to resize/move the start button, the rebar control and
1713 the tray notification control */
1714 dwp = BeginDeferWindowPos(4);
1715 if (dwp == NULL)
1716 {
1717 ERR("BeginDeferWindowPos failed. lastErr=%d\n", GetLastError());
1718 return;
1719 }
1720
1721 /* Limit the Start button width to the client width, if necessary */
1722 StartSize = m_StartButton.GetSize();
1723 if (StartSize.cx > rcClient.right)
1724 StartSize.cx = rcClient.right;
1725
1726 HWND hwndTaskToolbar = ::GetWindow(m_TaskSwitch, GW_CHILD);
1727 if (hwndTaskToolbar)
1728 {
1729 DWORD size = SendMessageW(hwndTaskToolbar, TB_GETBUTTONSIZE, 0, 0);
1730
1731 /* Themed button covers Edge area as well */
1732 StartSize.cy = HIWORD(size) + (m_Theme ? GetSystemMetrics(SM_CYEDGE) : 0);
1733 }
1734
1735 if (m_StartButton.m_hWnd != NULL)
1736 {
1737 /* Resize and reposition the button */
1738 dwp = m_StartButton.DeferWindowPos(dwp,
1739 NULL,
1740 0,
1741 0,
1742 StartSize.cx,
1743 StartSize.cy,
1745 if (dwp == NULL)
1746 {
1747 ERR("DeferWindowPos for start button failed. lastErr=%d\n", GetLastError());
1748 return;
1749 }
1750 }
1751
1752 /* Determine the size that the tray notification window needs */
1753 if (Horizontal)
1754 {
1755 TraySize.cx = 0;
1756 TraySize.cy = rcClient.bottom;
1757 }
1758 else
1759 {
1760 TraySize.cx = rcClient.right;
1761 TraySize.cy = 0;
1762 }
1763
1764 if (m_TrayNotify != NULL &&
1767 (WPARAM)Horizontal,
1768 (LPARAM)&TraySize))
1769 {
1770 /* Move the tray notification window to the desired location */
1771 if (Horizontal)
1772 ptTrayNotify.x = rcClient.right - TraySize.cx;
1773 else
1774 ptTrayNotify.y = rcClient.bottom - TraySize.cy;
1775
1776 dwp = ::DeferWindowPos(dwp,
1778 NULL,
1779 ptTrayNotify.x,
1780 ptTrayNotify.y,
1781 TraySize.cx,
1782 TraySize.cy,
1784 if (dwp == NULL)
1785 {
1786 ERR("DeferWindowPos for notification area failed. lastErr=%d\n", GetLastError());
1787 return;
1788 }
1789 }
1790
1791 /* Resize/Move the rebar control */
1792 if (m_Rebar != NULL)
1793 {
1794 POINT ptRebar = { 0, 0 };
1795 SIZE szRebar;
1796
1797 SetWindowStyle(m_Rebar, CCS_VERT, Horizontal ? 0 : CCS_VERT);
1798
1799 if (Horizontal)
1800 {
1801 ptRebar.x = StartSize.cx + GetSystemMetrics(SM_CXSIZEFRAME);
1802 szRebar.cx = ptTrayNotify.x - ptRebar.x;
1803 szRebar.cy = rcClient.bottom;
1804 }
1805 else
1806 {
1807 ptRebar.y = StartSize.cy + GetSystemMetrics(SM_CYSIZEFRAME);
1808 szRebar.cx = rcClient.right;
1809 szRebar.cy = ptTrayNotify.y - ptRebar.y;
1810 }
1811
1812 dwp = ::DeferWindowPos(dwp,
1813 m_Rebar,
1814 NULL,
1815 ptRebar.x,
1816 ptRebar.y,
1817 szRebar.cx,
1818 szRebar.cy,
1820 }
1821
1822 if (dwp != NULL)
1823 EndDeferWindowPos(dwp);
1824
1825 if (m_TaskSwitch != NULL)
1826 {
1827 /* Update the task switch window configuration */
1829 }
1830 }
1831
1832 void FitToRebar(PRECT pRect)
1833 {
1834 /* Get the rect of the rebar */
1835 RECT rebarRect, taskbarRect, clientRect;
1836 ::GetWindowRect(m_Rebar, &rebarRect);
1837 ::GetWindowRect(m_hWnd, &taskbarRect);
1838 ::GetClientRect(m_hWnd, &clientRect);
1839 OffsetRect(&rebarRect, -taskbarRect.left, -taskbarRect.top);
1840
1841 /* Calculate the difference of size of the taskbar and the rebar */
1842 SIZE margins;
1843 margins.cx = taskbarRect.right - taskbarRect.left - clientRect.right + clientRect.left;
1844 margins.cy = taskbarRect.bottom - taskbarRect.top - clientRect.bottom + clientRect.top;
1845
1846 /* Calculate the new size of the rebar and make it resize, then change the new taskbar size */
1847 switch (m_Position)
1848 {
1849 case ABE_TOP:
1850 rebarRect.bottom = rebarRect.top + pRect->bottom - pRect->top - margins.cy;
1852 pRect->bottom = pRect->top + rebarRect.bottom - rebarRect.top + margins.cy;
1853 break;
1854 case ABE_BOTTOM:
1855 rebarRect.top = rebarRect.bottom - (pRect->bottom - pRect->top - margins.cy);
1857 pRect->top = pRect->bottom - (rebarRect.bottom - rebarRect.top + margins.cy);
1858 break;
1859 case ABE_LEFT:
1860 rebarRect.right = rebarRect.left + (pRect->right - pRect->left - margins.cx);
1862 pRect->right = pRect->left + (rebarRect.right - rebarRect.left + margins.cx);
1863 break;
1864 case ABE_RIGHT:
1865 rebarRect.left = rebarRect.right - (pRect->right - pRect->left - margins.cx);
1867 pRect->left = pRect->right - (rebarRect.right - rebarRect.left + margins.cx);
1868 break;
1869 }
1870
1872 }
1873
1875 {
1876 if (m_StartMenuPopup != NULL)
1877 {
1878 POINTL pt;
1879 RECTL rcExclude;
1880 DWORD dwFlags = 0;
1881
1882 if (m_StartButton.GetWindowRect((RECT*) &rcExclude))
1883 {
1884 switch (m_Position)
1885 {
1886 case ABE_BOTTOM:
1887 pt.x = rcExclude.left;
1888 pt.y = rcExclude.top;
1889 dwFlags |= MPPF_TOP;
1890 break;
1891 case ABE_TOP:
1892 pt.x = rcExclude.left;
1893 pt.y = rcExclude.bottom;
1894 dwFlags |= MPPF_BOTTOM;
1895 break;
1896 case ABE_LEFT:
1897 pt.x = rcExclude.right;
1898 pt.y = rcExclude.top;
1899 dwFlags |= MPPF_RIGHT;
1900 break;
1901 case ABE_RIGHT:
1902 pt.x = rcExclude.left;
1903 pt.y = rcExclude.top;
1904 dwFlags |= MPPF_LEFT;
1905 break;
1906 }
1907
1908 m_StartMenuPopup->Popup(&pt, &rcExclude, dwFlags);
1909
1910 m_StartButton.SendMessageW(BM_SETSTATE, TRUE, 0);
1911 }
1912 }
1913 }
1914
1916 {
1917 RECT rcCurrent;
1918 POINT pt;
1919 BOOL over;
1921
1922 GetCursorPos(&pt);
1923 GetWindowRect(&rcCurrent);
1924 over = PtInRect(&rcCurrent, pt);
1925
1927 {
1928 over = TRUE;
1929 }
1930
1931 if (over)
1932 {
1933 if (state == AUTOHIDE_HIDING)
1934 {
1935 TRACE("AutoHide cancelling hide.\n");
1938 }
1939 else if (state == AUTOHIDE_HIDDEN)
1940 {
1941 TRACE("AutoHide starting show.\n");
1944 }
1945 }
1946 else
1947 {
1948 if (state == AUTOHIDE_SHOWING)
1949 {
1950 TRACE("AutoHide cancelling show.\n");
1953 }
1954 else if (state == AUTOHIDE_SHOWN)
1955 {
1956 TRACE("AutoHide starting hide.\n");
1959 }
1960
1962 }
1963 }
1964
1966 {
1969
1970 switch (m_AutoHideState)
1971 {
1972 case AUTOHIDE_HIDING:
1973 switch (m_Position)
1974 {
1975 case ABE_LEFT:
1976 m_AutoHideOffset.cy = 0;
1978 if (m_AutoHideOffset.cx < -w)
1980 break;
1981 case ABE_TOP:
1982 m_AutoHideOffset.cx = 0;
1984 if (m_AutoHideOffset.cy < -h)
1986 break;
1987 case ABE_RIGHT:
1988 m_AutoHideOffset.cy = 0;
1990 if (m_AutoHideOffset.cx > w)
1992 break;
1993 case ABE_BOTTOM:
1994 m_AutoHideOffset.cx = 0;
1996 if (m_AutoHideOffset.cy > h)
1998 break;
1999 }
2000
2002 {
2004 break;
2005 }
2006
2007 /* fallthrough */
2008 case AUTOHIDE_HIDDEN:
2009
2010 switch (m_Position)
2011 {
2012 case ABE_LEFT:
2014 m_AutoHideOffset.cy = 0;
2015 break;
2016 case ABE_TOP:
2017 m_AutoHideOffset.cx = 0;
2019 break;
2020 case ABE_RIGHT:
2022 m_AutoHideOffset.cy = 0;
2023 break;
2024 case ABE_BOTTOM:
2025 m_AutoHideOffset.cx = 0;
2027 break;
2028 }
2029
2032 break;
2033
2034 case AUTOHIDE_SHOWING:
2036 {
2038 }
2040 {
2042 }
2043 else
2044 {
2045 m_AutoHideOffset.cx = 0;
2046 }
2047
2049 {
2051 }
2053 {
2055 }
2056 else
2057 {
2058 m_AutoHideOffset.cy = 0;
2059 }
2060
2061 if (m_AutoHideOffset.cx != 0 || m_AutoHideOffset.cy != 0)
2062 {
2064 break;
2065 }
2066
2067 /* fallthrough */
2068 case AUTOHIDE_SHOWN:
2069
2072 break;
2073 }
2074
2076 }
2077
2078
2079
2080
2081
2082 /**********************************************************
2083 * ##### taskbar drawing #####
2084 */
2085
2087 {
2088 RECT rect;
2090
2092
2093 if (m_Theme)
2094 {
2096 DrawThemeBackground(m_Theme, hdc, iSBkgndPart[m_Position], 0, &rect, 0);
2097 }
2098
2099 return 0;
2100 }
2101
2103 {
2104 HDC hdc;
2105 RECT rect;
2107 SIZE size;
2108
2110
2113 return 0;
2114
2116 OffsetRect(&rect, -rect.left, -rect.top);
2117
2118 hdc = GetWindowDC();
2119
2120 switch (m_Position)
2121 {
2122 case ABE_LEFT:
2123 rect.left = rect.right - size.cx;
2124 break;
2125 case ABE_TOP:
2126 rect.top = rect.bottom - size.cy;
2127 break;
2128 case ABE_RIGHT:
2129 rect.right = rect.left + size.cx;
2130 break;
2131 case ABE_BOTTOM:
2132 default:
2133 rect.bottom = rect.top + size.cy;
2134 break;
2135 }
2136
2137 DrawThemeBackground(m_Theme, hdc, iSizerPart[m_Position], 0, &rect, 0);
2138
2139 ReleaseDC(hdc);
2140 return 0;
2141 }
2142
2143
2144
2145
2146
2147 /*
2148 * ITrayWindow
2149 */
2151 {
2152 RECT rcWnd;
2153
2154 /* Check if there's already a window created and try to show it.
2155 If it was somehow destroyed just create a new tray window. */
2156 if (m_hWnd != NULL && IsWindow())
2157 {
2158 return S_OK;
2159 }
2160
2163 dwExStyle |= WS_EX_TOPMOST;
2164
2166 if(!m_Theme)
2167 {
2168 dwStyle |= WS_THICKFRAME | WS_BORDER;
2169 }
2170
2171 ZeroMemory(&rcWnd, sizeof(rcWnd));
2172 if (m_Position != (DWORD) -1)
2173 rcWnd = m_TrayRects[m_Position];
2174
2175 if (!Create(NULL, rcWnd, NULL, dwStyle, dwExStyle))
2176 return E_FAIL;
2177
2178 /* Align all controls on the tray window */
2180
2181 /* Move the tray window to the right position and resize it if necessary */
2183
2184 return S_OK;
2185 }
2186
2188 {
2189 if (m_hWnd != NULL)
2190 {
2193 0,
2194 0);
2195 }
2196
2197 return S_OK;
2198 }
2199
2201 {
2202 return m_hWnd;
2203 }
2204
2206 {
2207 return (m_hWnd == hWnd ||
2209 }
2210
2212 {
2213 return IsPosHorizontal();
2214 }
2215
2217 {
2218 BOOL bPrevLock = g_TaskbarSettings.bLock;
2219
2220 if (g_TaskbarSettings.bLock != bLock)
2221 {
2222 g_TaskbarSettings.bLock = bLock;
2223
2224 if (m_TrayBandSite != NULL)
2225 {
2226 if (!SUCCEEDED(m_TrayBandSite->Lock(bLock)))
2227 {
2228 /* Reset?? */
2229 g_TaskbarSettings.bLock = bPrevLock;
2230 return bPrevLock;
2231 }
2232 }
2233
2234 if (m_Theme)
2235 {
2236 /* Update cached tray sizes */
2237 for(DWORD Pos = ABE_LEFT; Pos <= ABE_BOTTOM; Pos++)
2238 {
2239 RECT rcGripper = {0};
2240 AdjustSizerRect(&rcGripper, Pos);
2241
2243 {
2244 m_TrayRects[Pos].top += rcGripper.top;
2245 m_TrayRects[Pos].left += rcGripper.left;
2246 m_TrayRects[Pos].bottom += rcGripper.bottom;
2247 m_TrayRects[Pos].right += rcGripper.right;
2248 }
2249 else
2250 {
2251 m_TrayRects[Pos].top -= rcGripper.top;
2252 m_TrayRects[Pos].left -= rcGripper.left;
2253 m_TrayRects[Pos].bottom -= rcGripper.bottom;
2254 m_TrayRects[Pos].right -= rcGripper.right;
2255 }
2256 }
2257 }
2261 }
2262
2263 return bPrevLock;
2264 }
2265
2266 /* The task window is visible and non-WS_EX_TOOLWINDOW and
2267 { has WS_EX_APPWINDOW style or has no owner } and is none of explorer's
2268 special windows (such as the desktop or the tray window) */
2270 {
2272 {
2274 if (((exStyle & WS_EX_APPWINDOW) || ::GetWindow(hWnd, GW_OWNER) == NULL) &&
2275 !(exStyle & WS_EX_TOOLWINDOW))
2276 {
2277 return TRUE;
2278 }
2279 }
2280 return FALSE;
2281 }
2282
2283 /*
2284 * IContextMenu
2285 */
2287 UINT indexMenu,
2288 UINT idCmdFirst,
2289 UINT idCmdLast,
2290 UINT uFlags)
2291 {
2292 if (!m_ContextMenu)
2293 {
2296 return hr;
2297 }
2298
2299 return m_ContextMenu->QueryContextMenu(hPopup, indexMenu, idCmdFirst, idCmdLast, uFlags);
2300 }
2301
2303 {
2304 if (!m_ContextMenu)
2305 return E_INVALIDARG;
2306
2307 return m_ContextMenu->InvokeCommand(lpici);
2308 }
2309
2311 UINT uType,
2312 UINT *pwReserved,
2313 LPSTR pszName,
2314 UINT cchMax)
2315 {
2316 if (!m_ContextMenu)
2317 return E_INVALIDARG;
2318
2319 return m_ContextMenu->GetCommandString(idCmd, uType, pwReserved, pszName, cchMax);
2320 }
2321
2322 /**********************************************************
2323 * ##### message handling #####
2324 */
2325
2327 {
2328 HRESULT hRet;
2329
2330 ((ITrayWindow*)this)->AddRef();
2331
2332 SetWindowTheme(m_hWnd, L"TaskBar", NULL);
2333
2334 /* Create the Start button */
2336
2337 /* Load the saved tray window settings */
2339
2340 /* Create and initialize the start menu */
2344
2345 /* Create the task band */
2347 if (FAILED_UNEXPECTEDLY(hRet))
2348 return FALSE;
2349
2350 /* Create the rebar band site. This actually creates the rebar and the tasks toolbar. */
2352 if (FAILED_UNEXPECTEDLY(hRet))
2353 return FALSE;
2354
2355 /* Create the tray notification window */
2357 if (FAILED_UNEXPECTEDLY(hRet))
2358 return FALSE;
2359
2360 /* Get the hwnd of the rebar */
2362 if (FAILED_UNEXPECTEDLY(hRet))
2363 return FALSE;
2364
2365 /* Get the hwnd of the tasks toolbar */
2367 if (FAILED_UNEXPECTEDLY(hRet))
2368 return FALSE;
2369
2370 /* Get the hwnd of the tray notification window */
2372 if (FAILED_UNEXPECTEDLY(hRet))
2373 return FALSE;
2374
2377 return FALSE;
2378
2379 SetWindowTheme(m_Rebar, L"TaskBar", NULL);
2380
2381 UpdateFonts();
2382
2384
2386 {
2389 }
2390
2391 /* Set the initial lock state in the band site */
2393
2406
2407 return TRUE;
2408 }
2409
2410#define TIMER_ID_IGNOREPULSERESET 888
2411#define TIMER_IGNOREPULSERESET_TIMEOUT 200
2412
2414 {
2416 return 0;
2417 }
2418
2420 {
2421 if (wParam)
2422 SaveState();
2423 return 0;
2424 }
2425
2427 {
2428 if (m_Theme)
2430
2431 m_Theme = OpenThemeData(m_hWnd, L"TaskBar");
2432
2433 if (m_Theme)
2434 {
2436 }
2437 else
2438 {
2440 }
2442
2443 return TRUE;
2444 }
2445
2447 {
2448 if (wParam == SPI_SETNONCLIENTMETRICS)
2449 {
2452 UpdateFonts();
2455 }
2456
2457 if (m_StartMenuPopup && lstrcmpiW((LPCWSTR)lParam, L"TraySettings") == 0)
2458 {
2459 HideStartMenu();
2460
2462#if 1 // FIXME: Please re-use the start menu
2463 /* Re-create the start menu */
2467 FIXME("Use UpdateStartMenu\n");
2468#else
2469 // Update the start menu
2471#endif
2472 }
2473
2474 return 0;
2475 }
2476
2478 {
2479 HDC hdc = (HDC) wParam;
2480
2481 if (!m_Theme)
2482 {
2483 bHandled = FALSE;
2484 return 0;
2485 }
2486
2488 }
2489
2491 {
2492 /* Load the saved tray window settings */
2494
2495 /* Move the tray window to the right position and resize it if necessary */
2497
2498 return TRUE;
2499 }
2500
2502 {
2503 COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT *)lParam;
2504 switch (pCopyData->dwData)
2505 {
2506 case TABDMC_APPBAR:
2507 return appbar_message(pCopyData);
2508 case TABDMC_NOTIFY:
2509 case TABDMC_LOADINPROC:
2510 return ::SendMessageW(m_TrayNotify, uMsg, wParam, lParam);
2511 }
2512 return FALSE;
2513 }
2514
2515 // We have to draw non-client area because the 'Show Desktop' button is beyond client area.
2517 {
2518 if (!m_pShowDesktopButton || !m_pShowDesktopButton->IsWindow())
2519 return;
2521 }
2522
2524 {
2525 DefWindowProc(uMsg, wParam, lParam);
2526 bHandled = TRUE;
2527
2529 {
2530 DrawShowDesktopButton(); // We have to draw non-client area
2531 return 0;
2532 }
2533
2534 DrawSizerWithTheme((HRGN) wParam);
2535 DrawShowDesktopButton(); // We have to draw non-client area
2536 return 0;
2537 }
2538
2540 {
2543 }
2544
2546 {
2547 RECT rcClient;
2548 POINT pt;
2549
2551 {
2552 /* The user may not be able to resize the tray window.
2553 Pretend like the window is not sizeable when the user
2554 clicks on the border. */
2555 return HTBORDER;
2556 }
2557
2559 if (GetClientRect(&rcClient) &&
2560 (MapWindowPoints(NULL, (LPPOINT) &rcClient, 2) != 0 || GetLastError() == ERROR_SUCCESS))
2561 {
2562 pt.x = GET_X_LPARAM(lParam);
2563 pt.y = GET_Y_LPARAM(lParam);
2564
2566 return HTBORDER;
2567
2568 if (PtInRect(&rcClient, pt))
2569 {
2570 /* The user is trying to drag the tray window */
2571 return HTCAPTION;
2572 }
2573
2574 /* Depending on the position of the tray window, allow only
2575 changing the border next to the monitor working area */
2576 switch (m_Position)
2577 {
2578 case ABE_TOP:
2579 if (pt.y > rcClient.bottom)
2580 return HTBOTTOM;
2581 break;
2582 case ABE_LEFT:
2583 if (pt.x > rcClient.right)
2584 return HTRIGHT;
2585 break;
2586 case ABE_RIGHT:
2587 if (pt.x < rcClient.left)
2588 return HTLEFT;
2589 break;
2590 case ABE_BOTTOM:
2591 default:
2592 if (pt.y < rcClient.top)
2593 return HTTOP;
2594 break;
2595 }
2596 }
2597 return HTBORDER;
2598 }
2599
2601 {
2602 POINT ptCursor;
2603 PRECT pRect = (PRECT) lParam;
2604
2605 /* We need to ensure that an application can not accidently
2606 move the tray window (using SetWindowPos). However, we still
2607 need to be able to move the window in case the user wants to
2608 drag the tray window to another position or in case the user
2609 wants to resize the tray window. */
2610 if (!g_TaskbarSettings.bLock && GetCursorPos(&ptCursor))
2611 {
2612 IsDragging = TRUE;
2614 }
2615 else
2616 {
2617 *pRect = m_TrayRects[m_Position];
2618 }
2619 return TRUE;
2620 }
2621
2623 {
2624 PRECT pRect = (PRECT) lParam;
2625
2627 {
2628 FitToRebar(pRect);
2629 }
2630 else
2631 {
2632 *pRect = m_TrayRects[m_Position];
2633 }
2634 return TRUE;
2635 }
2636
2638 {
2640 return TRUE;
2641 }
2642
2644 {
2645 RECT rcClient;
2646 if (wParam == SIZE_RESTORED && lParam == 0)
2647 {
2649 /* Clip the tray window on multi monitor systems so the edges can't
2650 overlap into another monitor */
2652
2653 if (!GetClientRect(&rcClient))
2654 {
2655 return FALSE;
2656 }
2657 }
2658 else
2659 {
2660 rcClient.left = rcClient.top = 0;
2661 rcClient.right = LOWORD(lParam);
2662 rcClient.bottom = HIWORD(lParam);
2663 }
2664
2665 AlignControls(&rcClient);
2666 return TRUE;
2667 }
2668
2670 {
2671 InSizeMove = TRUE;
2672 IsDragging = FALSE;
2674 {
2675 /* Remove the clipping on multi monitor systems while dragging around */
2677 }
2678 return TRUE;
2679 }
2680
2682 {
2683 InSizeMove = FALSE;
2685 {
2687
2688 /* Apply clipping */
2690 }
2691 return TRUE;
2692 }
2693
2695 {
2696 switch (wParam)
2697 {
2698 case TEXT(' '):
2699 {
2700 /* The user pressed Alt+Space, this usually brings up the system menu of a window.
2701 The tray window needs to handle this specially, since it normally doesn't have
2702 a system menu. */
2703
2704 static const UINT uidDisableItem [] = {
2705 SC_RESTORE,
2706 SC_MOVE,
2707 SC_SIZE,
2710 };
2711 HMENU hSysMenu;
2712 UINT i, uId;
2713
2714 /* temporarily enable the system menu */
2716
2717 hSysMenu = GetSystemMenu(FALSE);
2718 if (hSysMenu != NULL)
2719 {
2720 /* Disable all items that are not relevant */
2721 for (i = 0; i < _countof(uidDisableItem); i++)
2722 {
2723 EnableMenuItem(hSysMenu,
2724 uidDisableItem[i],
2726 }
2727
2728 EnableMenuItem(hSysMenu,
2729 SC_CLOSE,
2730 MF_BYCOMMAND |
2732
2733 /* Display the system menu */
2734 uId = TrackMenu(
2735 hSysMenu,
2736 NULL,
2739 FALSE);
2740 if (uId != 0)
2741 {
2743 }
2744 }
2745
2746 /* revert the system menu window style */
2748 break;
2749 }
2750
2751 default:
2752 bHandled = FALSE;
2753 }
2754 return TRUE;
2755 }
2756
2758 {
2759 if (!ppt || !prcStartBtn || !pwi)
2760 return FALSE;
2761
2762 switch (m_Position)
2763 {
2764 case ABE_TOP:
2765 case ABE_LEFT:
2766 {
2767 if (ppt->x > prcStartBtn->right || ppt->y > prcStartBtn->bottom)
2768 return FALSE;
2769 break;
2770 }
2771 case ABE_RIGHT:
2772 {
2773 if (ppt->x < prcStartBtn->left || ppt->y > prcStartBtn->bottom)
2774 return FALSE;
2775
2776 if (prcStartBtn->right + (int)pwi->cxWindowBorders * 2 + 1 < pwi->rcWindow.right &&
2777 ppt->x > prcStartBtn->right)
2778 {
2779 return FALSE;
2780 }
2781 break;
2782 }
2783 case ABE_BOTTOM:
2784 {
2785 if (ppt->x > prcStartBtn->right || ppt->y < prcStartBtn->top)
2786 return FALSE;
2787
2788 if (prcStartBtn->bottom + (int)pwi->cyWindowBorders * 2 + 1 < pwi->rcWindow.bottom &&
2789 ppt->y > prcStartBtn->bottom)
2790 {
2791 return FALSE;
2792 }
2793
2794 break;
2795 }
2796 }
2797 return TRUE;
2798 }
2799
2801 {
2802 if (!ppt || !prcShowDesktopBtn)
2803 return FALSE;
2805
2806 switch (m_Position)
2807 {
2808 case ABE_LEFT:
2809 return !(ppt->x > prcShowDesktopBtn->right || ppt->y < prcShowDesktopBtn->top);
2810 case ABE_TOP:
2811 return !(ppt->x < prcShowDesktopBtn->left || ppt->y > prcShowDesktopBtn->bottom);
2812 case ABE_RIGHT:
2813 return !(ppt->x < prcShowDesktopBtn->left || ppt->y < prcShowDesktopBtn->top);
2814 case ABE_BOTTOM:
2815 return !(ppt->x < prcShowDesktopBtn->left || ppt->y < prcShowDesktopBtn->top);
2816 }
2817 return FALSE;
2818 }
2819
2825 {
2827 WINDOWINFO wi = {sizeof(WINDOWINFO)};
2828
2829 bHandled = FALSE;
2830
2831 RECT rcStartBtn;
2832 m_StartButton.GetWindowRect(&rcStartBtn);
2833 GetWindowInfo(m_hWnd, &wi);
2834
2835 if (IsPointWithinStartButton(&pt, &rcStartBtn, &wi))
2836 {
2837 bHandled = TRUE;
2839 return 0;
2840 }
2841
2844
2845 return 0;
2846 }
2847
2849 {
2850 /* We want the user to be able to get a context menu even on the nonclient
2851 area (including the sizing border)! */
2852 uMsg = WM_CONTEXTMENU;
2853 wParam = (WPARAM) m_hWnd;
2854
2855 return OnContextMenu(uMsg, wParam, lParam, bHandled);
2856 }
2857
2859 {
2860 LRESULT Ret = FALSE;
2861 POINT pt, *ppt = NULL;
2862 HWND hWndExclude = NULL;
2863
2864 /* Check if the administrator has forbidden access to context menus */
2866 return FALSE;
2867
2868 pt.x = (SHORT) LOWORD(lParam);
2869 pt.y = (SHORT) HIWORD(lParam);
2870
2871 if (pt.x != -1 || pt.y != -1)
2872 ppt = &pt;
2873 else
2874 hWndExclude = m_StartButton.m_hWnd;
2875
2877 {
2878 /* Make sure we can't track the context menu if the start
2879 menu is currently being shown */
2881 {
2882 CComPtr<IContextMenu> ctxMenu;
2884 TrackCtxMenu(ctxMenu, ppt, hWndExclude, m_Position == ABE_BOTTOM, this);
2885 }
2886 }
2887 else
2888 {
2889 /* See if the context menu should be handled by the task band site */
2890 if (ppt != NULL && m_TrayBandSite != NULL)
2891 {
2892 HWND hWndAtPt;
2893 POINT ptClient = *ppt;
2894
2895 /* Convert the coordinates to client-coordinates */
2896 ::MapWindowPoints(NULL, m_hWnd, &ptClient, 1);
2897
2898 hWndAtPt = ChildWindowFromPoint(ptClient);
2899 if (hWndAtPt != NULL &&
2900 (hWndAtPt == m_Rebar || ::IsChild(m_Rebar, hWndAtPt)))
2901 {
2902 /* Check if the user clicked on the task switch window */
2903 ptClient = *ppt;
2904 ::MapWindowPoints(NULL, m_Rebar, &ptClient, 1);
2905
2907 if (hWndAtPt == m_TaskSwitch)
2908 goto HandleTrayContextMenu;
2909
2910 /* Forward the message to the task band site */
2911 m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret);
2912 }
2913 else
2914 goto HandleTrayContextMenu;
2915 }
2916 else
2917 {
2918HandleTrayContextMenu:
2919 /* Tray the default tray window context menu */
2920 TrackCtxMenu(this, ppt, NULL, FALSE, this);
2921 }
2922 }
2923 return Ret;
2924 }
2925
2927 {
2928 LRESULT Ret = FALSE;
2929 /* FIXME: We can't check with IsChild whether the hwnd is somewhere inside
2930 the rebar control! But we shouldn't forward messages that the band
2931 site doesn't handle, such as other controls (start button, tray window */
2932
2933 HRESULT hr = E_FAIL;
2934
2935 if (m_TrayBandSite)
2936 {
2937 hr = m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret);
2938 if (SUCCEEDED(hr))
2939 return Ret;
2940 }
2941
2942 if (m_TrayBandSite == NULL || FAILED(hr))
2943 {
2944 const NMHDR *nmh = (const NMHDR *) lParam;
2945
2946 if (nmh->hwndFrom == m_TrayNotify)
2947 {
2948 switch (nmh->code)
2949 {
2950 case NTNWM_REALIGN:
2951 /* Cause all controls to be aligned */
2953 break;
2954 }
2955 }
2956 }
2957 return Ret;
2958 }
2959
2961 {
2962 /* Let the clock handle the double-click */
2964
2965 /* We "handle" this message so users can't cause a weird maximize/restore
2966 window animation when double-clicking the tray window! */
2967 return TRUE;
2968 }
2969
2971 {
2972 if (m_pShowDesktopButton && m_pShowDesktopButton->m_bPressed) // Did you click the button?
2973 {
2976 bHandled = TRUE;
2977 }
2978
2979 return FALSE;
2980 }
2981
2983 {
2985 m_pShowDesktopButton->OnLButtonUp(uMsg, wParam, lParam, bHandled);
2986 return FALSE;
2987 }
2988
2990 {
2991 DestroyWindow();
2992 return TRUE;
2993 }
2994
2996 {
2997 HWND hwndStartMenu;
2998 HRESULT hr = IUnknown_GetWindow(m_StartMenuPopup, &hwndStartMenu);
3000 return FALSE;
3001
3002 if (::IsWindowVisible(hwndStartMenu))
3003 HideStartMenu();
3004 else
3006
3007 return TRUE;
3008 }
3009
3011 {
3012 /*
3013 * TWM_DOEXITWINDOWS is send by the CDesktopBrowser to us
3014 * to show the shutdown dialog. Also a WM_CLOSE message sent
3015 * by apps should show the dialog.
3016 */
3017 return DoExitWindows();
3018 }
3019
3021 {
3022 if (wParam == SC_CLOSE)
3023 {
3024 return DoExitWindows();
3025 }
3026
3027 bHandled = FALSE;
3028 return TRUE;
3029 }
3030
3032 {
3033 bHandled = TRUE;
3034 return (LRESULT)m_TaskSwitch;
3035 }
3036
3037 void RestoreMinimizedNonTaskWnds(BOOL bDestroyed, HWND hwndActive)
3038 {
3039 for (INT i = g_MinimizedAll.GetSize() - 1; i >= 0; --i)
3040 {
3041 HWND hwnd = g_MinimizedAll[i].hwnd;
3042 if (!hwnd || hwndActive == hwnd)
3043 continue;
3044
3047 {
3048 ::SetWindowPlacement(hwnd, &g_MinimizedAll[i].wndpl); // Restore
3049 }
3050 }
3051
3053
3054 if (!bDestroyed)
3055 ::SetForegroundWindow(hwndActive);
3056 }
3057
3059 {
3060 if (IgnorePulse)
3061 return 0;
3062
3064 IgnorePulse = TRUE;
3067 return 0;
3068 }
3069
3071 {
3072 return HandleHotKey(wParam);
3073 }
3074
3076 {
3082 };
3083
3085 {
3086 WCHAR szClass[32];
3087 GetClassNameW(hwnd, szClass, _countof(szClass));
3088 return wcscmp(szClass, L"#32770") == 0;
3089 }
3090
3092 {
3094 if (hwnd == info->hwndDesktop || hwnd == info->hTrayWnd || hwnd == info->hwndProgman)
3095 return TRUE; // Ignore special windows
3096
3097 if (!info->bShowDesktop)
3098 {
3100 return TRUE;
3101 HWND hwndOwner = ::GetWindow(hwnd, GW_OWNER);
3102 if (hwndOwner && !::IsWindowEnabled(hwndOwner))
3103 return TRUE;
3104 }
3105
3106 if (CanBeMinimized(hwnd))
3107 {
3108 MINWNDPOS mwp = { hwnd, { sizeof(mwp.wndpl) } };
3109 if (::GetWindowPlacement(hwnd, &mwp.wndpl) && // Save the position and status
3111 {
3112 info->pMinimizedAll->Add(mwp);
3113 }
3114 }
3115
3116 return TRUE;
3117 }
3118
3119 VOID MinimizeAll(BOOL bShowDesktop = FALSE)
3120 {
3121 IgnorePulse = TRUE;
3123
3125 info.hwndDesktop = GetDesktopWindow();;
3126 info.hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
3127 info.hwndProgman = FindWindowW(L"Progman", NULL);
3128 info.pMinimizedAll = &g_MinimizedAll;
3129 info.bShowDesktop = bShowDesktop;
3131
3135 }
3136
3138 {
3140 }
3141
3143 {
3144 IgnorePulse = TRUE;
3146
3147 for (INT i = g_MinimizedAll.GetSize() - 1; i >= 0; --i)
3148 {
3149 HWND hwnd = g_MinimizedAll[i].hwnd;
3152 }
3153
3156 }
3157
3159 {
3160 LRESULT Ret = FALSE;
3161
3163 {
3164 return FALSE;
3165 }
3166
3167 if (m_TrayBandSite == NULL || FAILED_UNEXPECTEDLY(m_TrayBandSite->ProcessMessage(m_hWnd, uMsg, wParam, lParam, &Ret)))
3168 {
3169 return HandleCommand(LOWORD(wParam));
3170 }
3171 return Ret;
3172 }
3173
3175 {
3177
3179 {
3181 }
3182
3183 return TRUE;
3184 }
3185
3187 {
3189 {
3191 }
3192 else if (wParam == TIMER_ID_AUTOHIDE)
3193 {
3195 }
3197 {
3200 }
3201 return 0;
3202 }
3203
3205 {
3207 DrawShowDesktopButton(); // We have to draw non-client area
3208 bHandled = TRUE;
3209 return ret;
3210 }
3211
3213 {
3214 RECT *rc = NULL;
3215 /* Ignore WM_NCCALCSIZE if we are not themed or locked */
3217 {
3218 bHandled = FALSE;
3219 return 0;
3220 }
3221 if(!wParam)
3222 {
3223 rc = (RECT*)wParam;
3224 }
3225 else
3226 {
3228 if(prms->lppos->flags & SWP_NOSENDCHANGING)
3229 {
3230 bHandled = FALSE;
3231 return 0;
3232 }
3233 rc = &prms->rgrc[0];
3234 }
3235
3237
3238 return 0;
3239 }
3240
3242 {
3243 HMENU hMenu = (HMENU)wParam;
3245 {
3249 if (g_Arrangement != NONE)
3250 {
3253 MENUITEMINFOW mii = { sizeof(mii) };
3255 mii.fMask = MIIM_TYPE;
3256 mii.fType = MFT_STRING;
3257 mii.dwTypeData = const_cast<LPWSTR>(&strCaption[0]);
3259 }
3260 else
3261 {
3263 }
3264 }
3265 else
3266 {
3272 g_WindowPosBackup.RemoveAll();
3273 }
3274 return 0;
3275 }
3276
3278 {
3279#if 0
3280 LPNMRBAUTOSIZE as = (LPNMRBAUTOSIZE) nmhdr;
3281
3282 if (!as->fChanged)
3283 return 0;
3284
3285 RECT rc;
3286 ::GetWindowRect(m_hWnd, &rc);
3287
3288 SIZE szWindow = {
3289 rc.right - rc.left,
3290 rc.bottom - rc.top };
3291 SIZE szTarget = {
3292 as->rcTarget.right - as->rcTarget.left,
3293 as->rcTarget.bottom - as->rcTarget.top };
3294 SIZE szActual = {
3295 as->rcActual.right - as->rcActual.left,
3296 as->rcActual.bottom - as->rcActual.top };
3297
3298 SIZE borders = {
3299 szWindow.cx - szTarget.cx,
3300 szWindow.cy - szTarget.cx,
3301 };
3302
3303 switch (m_Position)
3304 {
3305 case ABE_LEFT:
3306 szWindow.cx = szActual.cx + borders.cx;
3307 break;
3308 case ABE_TOP:
3309 szWindow.cy = szActual.cy + borders.cy;
3310 break;
3311 case ABE_RIGHT:
3312 szWindow.cx = szActual.cx + borders.cx;
3313 rc.left = rc.right - szWindow.cy;
3314 break;
3315 case ABE_BOTTOM:
3316 szWindow.cy = szActual.cy + borders.cy;
3317 rc.top = rc.bottom - szWindow.cy;
3318 break;
3319 }
3320
3321 SetWindowPos(NULL, rc.left, rc.top, szWindow.cx, szWindow.cy, SWP_NOACTIVATE | SWP_NOZORDER);
3322#else
3323 bHandled = FALSE;
3324#endif
3325 return 0;
3326 }
3327
3329 {
3330 TaskbarSettings* newSettings = (TaskbarSettings*)lParam;
3331
3332 /* Propagate the new settings to the children */
3335
3336 /* Toggle autohide */
3337 if (newSettings->sr.AutoHide != g_TaskbarSettings.sr.AutoHide)
3338 {
3339 g_TaskbarSettings.sr.AutoHide = newSettings->sr.AutoHide;
3342 if (!newSettings->sr.AutoHide)
3344 else
3346 }
3347
3348 /* Toggle lock state */
3349 Lock(newSettings->bLock);
3350
3351 /* Toggle OnTop state */
3352 if (newSettings->sr.AlwaysOnTop != g_TaskbarSettings.sr.AlwaysOnTop)
3353 {
3355 HWND hWndInsertAfter = newSettings->sr.AlwaysOnTop ? HWND_TOPMOST : HWND_BOTTOM;
3356 SetWindowPos(hWndInsertAfter, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
3357 }
3358
3359 /* Adjust taskbar size */
3361
3363 return 0;
3364 }
3365
3367
3370 {
3371 MSG Msg;
3372 LRESULT lRet;
3373
3374 Msg.hwnd = m_hWnd;
3375 Msg.message = uMsg;
3376 Msg.wParam = wParam;
3377 Msg.lParam = lParam;
3378
3379 if (m_StartMenuBand->TranslateMenuMessage(&Msg, &lRet) == S_OK)
3380 {
3381 return lRet;
3382 }
3383
3384 wParam = Msg.wParam;
3385 lParam = Msg.lParam;
3386 }
3387 MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged)
3389 NOTIFY_CODE_HANDLER(RBN_AUTOSIZE, OnRebarAutoSize) // Doesn't quite work ;P
3401 MESSAGE_HANDLER(WM_DISPLAYCHANGE, OnDisplayChange)
3429 ALT_MSG_MAP(1)
3430 END_MSG_MAP()
3431
3432 /*****************************************************************************/
3433
3435 {
3436 MSG Msg;
3437
3438 /* FIXME: We should keep a reference here... */
3439
3440 while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
3441 {
3442 if (Msg.message == WM_QUIT)
3443 break;
3444
3445 if (m_StartMenuBand == NULL ||
3446 m_StartMenuBand->IsMenuMessage(&Msg) != S_OK)
3447 {
3450 }
3451 }
3452 }
3453
3455 {
3456 MSG Msg;
3457 BOOL Ret;
3458
3459 /* FIXME: We should keep a reference here... */
3460
3461 while (true)
3462 {
3463 Ret = GetMessage(&Msg, NULL, 0, 0);
3464
3465 if (!Ret || Ret == -1)
3466 break;
3467
3468 if (m_StartMenuBand == NULL ||
3469 m_StartMenuBand->IsMenuMessage(&Msg) != S_OK)
3470 {
3473 }
3474 }
3475 }
3476
3477 /*
3478 * IShellDesktopTray
3479 *
3480 * NOTE: this is a very windows-specific COM interface used by SHCreateDesktop()!
3481 * These are the calls I observed, it may be wrong/incomplete/buggy!!!
3482 * The reason we implement it is because we have to use SHCreateDesktop() so
3483 * that the shell provides the desktop window and all the features that come
3484 * with it (especially positioning of desktop icons)
3485 */
3486
3488 {
3489 /* FIXME: Return ABS_ flags? */
3490 TRACE("IShellDesktopTray::GetState() unimplemented!\n");
3491 return 0;
3492 }
3493
3495 {
3496 TRACE("IShellDesktopTray::GetTrayWindow(0x%p)\n", phWndTray);
3497 *phWndTray = m_hWnd;
3498 return S_OK;
3499 }
3500
3502 {
3503 TRACE("IShellDesktopTray::RegisterDesktopWindow(0x%p)\n", hWndDesktop);
3504
3505 m_DesktopWnd = hWndDesktop;
3506 return S_OK;
3507 }
3508
3509 virtual HRESULT STDMETHODCALLTYPE Unknown(IN DWORD dwUnknown1, IN DWORD dwUnknown2)
3510 {
3511 TRACE("IShellDesktopTray::Unknown(%u,%u) unimplemented!\n", dwUnknown1, dwUnknown2);
3512 return S_OK;
3513 }
3514
3516 {
3517 m_StartButton.SendMessageW(BM_SETSTATE, FALSE, 0);
3518 return S_OK;
3519 }
3520
3522 {
3523 if (!phwnd)
3524 return E_INVALIDARG;
3525 *phwnd = m_hWnd;
3526 return S_OK;
3527 }
3528
3530 {
3531 return E_NOTIMPL;
3532 }
3533
3534 void _Init()
3535 {
3536 m_Position = (DWORD) -1;
3537 }
3538
3540
3543 /*COM_INTERFACE_ENTRY_IID(IID_ITrayWindow, ITrayWindow)*/
3546 COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
3547 END_COM_MAP()
3548};
3549
3553 public IContextMenu
3554{
3559
3560public:
3561 HRESULT Initialize(ITrayWindow * pTrayWnd, IN HWND hWndOwner)
3562 {
3563 this->TrayWnd = (CTrayWindow *) pTrayWnd;
3564 this->hWndOwner = hWndOwner;
3565 this->m_idCmdCmFirst = 0;
3566 return S_OK;
3567 }
3568
3571 UINT indexMenu,
3572 UINT idCmdFirst,
3573 UINT idCmdLast,
3574 UINT uFlags)
3575 {
3576 HMENU hMenuBase;
3577
3579 if (!hMenuBase)
3581
3583 {
3585 MENUITEMINFOW mii = { sizeof(mii) };
3586 mii.fMask = MIIM_ID | MIIM_TYPE;
3588 mii.fType = MFT_STRING;
3589 mii.dwTypeData = const_cast<LPWSTR>(&strRestoreAll[0]);
3591 }
3592
3594 {
3595 DeleteMenu(hPopup,
3597 MF_BYCOMMAND);
3598 }
3599
3600 CheckMenuItem(hMenuBase,
3603
3604 UINT idCmdNext;
3605 idCmdNext = Shell_MergeMenus(hPopup, hMenuBase, indexMenu, idCmdFirst, idCmdLast, MM_SUBMENUSHAVEIDS | MM_ADDSEPARATOR);
3606 m_idCmdCmFirst = idCmdNext - idCmdFirst;
3607
3608 ::DestroyMenu(hMenuBase);
3609
3610 if (TrayWnd->m_TrayBandSite != NULL)
3611 {
3612 pcm.Release();
3613 if (FAILED(TrayWnd->m_TrayBandSite->AddContextMenus(
3614 hPopup,
3615 indexMenu,
3616 idCmdNext,
3617 idCmdLast,
3618 CMF_NORMAL,
3619 &pcm)))
3620 {
3621 WARN("AddContextMenus failed.\n");
3622 pcm.Release();
3623 }
3624 }
3625
3626 return S_OK;
3627 }
3628
3631 {
3632 UINT uiCmdId = PtrToUlong(lpici->lpVerb);
3633 if (uiCmdId != 0)
3634 {
3635 if (uiCmdId >= m_idCmdCmFirst)
3636 {
3637 CMINVOKECOMMANDINFO cmici = { 0 };
3638
3639 if (pcm != NULL)
3640 {
3641 /* Setup and invoke the shell command */
3642 cmici.cbSize = sizeof(cmici);
3643 cmici.hwnd = hWndOwner;
3644 cmici.lpVerb = (LPCSTR) MAKEINTRESOURCEW(uiCmdId - m_idCmdCmFirst);
3645 cmici.nShow = SW_NORMAL;
3646
3647 pcm->InvokeCommand(&cmici);
3648 }
3649 }
3650 else
3651 {
3652 TrayWnd->ExecContextMenuCmd(uiCmdId);
3653 }
3654 }
3655
3656 return S_OK;
3657 }
3658
3661 UINT uType,
3662 UINT *pwReserved,
3663 LPSTR pszName,
3664 UINT cchMax)
3665 {
3666 return E_NOTIMPL;
3667 }
3668
3670 {
3671 }
3672
3674 {
3675 }
3676
3678 COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
3679 END_COM_MAP()
3680};
3681
3682HRESULT TrayWindowCtxMenuCreator(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu)
3683{
3685 mnu->Initialize(TrayWnd, hWndOwner);
3686 *ppCtxMenu = mnu;
3687 return S_OK;
3688}
3689
3690HRESULT CreateTrayWindow(ITrayWindow ** ppTray)
3691{
3693 if (Tray == NULL)
3694 return E_OUTOFMEMORY;
3695
3696 Tray->_Init();
3697 Tray->Open();
3698
3699 *ppTray = (ITrayWindow *) Tray;
3700
3701 return S_OK;
3702}
3703
3704HRESULT
3706{
3707 CTrayWindow * TrayWindow = static_cast<CTrayWindow *>(Tray);
3708 return TrayWindow->RaiseStartButton();
3709}
3710
3711VOID TrayProcessMessages(ITrayWindow *Tray)
3712{
3713 CTrayWindow * TrayWindow = static_cast<CTrayWindow *>(Tray);
3714 TrayWindow->TrayProcessMessages();
3715}
3716
3717VOID TrayMessageLoop(ITrayWindow *Tray)
3718{
3719 CTrayWindow * TrayWindow = static_cast<CTrayWindow *>(Tray);
3720 TrayWindow->TrayMessageLoop();
3721}
@ TS_TRUE
UINT cchMax
static int state
Definition: maze.c:121
HWND hWnd
Definition: settings.c:17
const WCHAR * class
Definition: main.c:68
#define IDB_START
Definition: resource.h:75
#define IDS_START
Definition: resource.h:23
static RECT margins
Definition: print.c:55
@ Create
Definition: registry.c:563
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
HINSTANCE hExplorerInstance
Definition: explorer.cpp:24
VOID DisplayTrayProperties(IN HWND hwndOwner, IN HWND hwndTaskbar)
Definition: trayprop.cpp:345
#define TWM_OPENSTARTMENU
Definition: precomp.h:132
HRESULT UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons, IN BOOL bRefresh)
Definition: startmnu.cpp:24
#define TSWM_UPDATETASKBARPOS
Definition: precomp.h:387
#define TNWM_GETMINIMUMSIZE
Definition: precomp.h:370
HRESULT CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow *TrayWnd, IN HWND hWndOwner, IContextMenu **ppCtxMenu)
HMENU LoadPopupMenu(IN HINSTANCE hInstance, IN LPCWSTR lpMenuName)
Definition: util.cpp:33
#define TWM_GETTASKSWITCH
Definition: precomp.h:131
IMenuPopup * CreateStartMenu(IN ITrayWindow *Tray, OUT IMenuBand **ppMenuBand, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons)
Definition: startmnu.cpp:50
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
#define TWM_PULSE
Definition: precomp.h:134
HRESULT CTrayNotifyWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: trayntfy.cpp:548
HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand *pTaskBand, OUT ITrayBandSite **pBandSite)
Definition: tbsite.cpp:715
#define TWM_SETTINGSCHANGED
Definition: precomp.h:133
#define TNWM_GETSHOWDESKTOPBUTTON
Definition: precomp.h:372
#define NTNWM_REALIGN
Definition: precomp.h:374
HRESULT InitShellServices(HDPA *phdpa)
HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv)
Definition: taskband.cpp:346
HRESULT ShutdownShellServices(HDPA hdpa)
#define IDM_SEARCH
Definition: resource.h:71
#define ID_SHELL_CMD_OPEN_TASKMGR
Definition: resource.h:208
#define ID_SHELL_CMD_CUST_NOTIF
Definition: resource.h:214
#define ID_SHELL_CMD_UNDO_ACTION
Definition: resource.h:209
#define IDS_RESTORE_ALL
Definition: resource.h:105
#define IDM_TRAYWND
Definition: resource.h:57
#define ID_SHELL_CMD_PROPERTIES
Definition: resource.h:204
#define IDB_STARTMENU
Definition: resource.h:44
#define ID_SHELL_CMD_TILE_WND_H
Definition: resource.h:212
#define IDS_TRAYWND_UNDO_TILE
Definition: resource.h:107
#define IDC_STARTBTN
Definition: resource.h:144
#define ID_SHELL_CMD_CASCADE_WND
Definition: resource.h:213
#define ID_SHELL_CMD_RESTORE_ALL
Definition: resource.h:216
#define ID_SHELL_CMD_TILE_WND_V
Definition: resource.h:211
#define ID_LOCKTASKBAR
Definition: resource.h:207
#define ID_SHELL_CMD_SHOW_DESKTOP
Definition: resource.h:210
#define IDS_TRAYWND_UNDO_CASCADE
Definition: resource.h:106
#define ID_SHELL_CMD_EXPLORE_ALL_USERS
Definition: resource.h:206
#define ID_SHELL_CMD_ADJUST_DAT
Definition: resource.h:215
#define IDS_HELP_COMMAND
Definition: resource.h:103
#define ID_SHELL_CMD_OPEN_ALL_USERS
Definition: resource.h:205
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
void Release()
Definition: atlcomcli.h:170
int GetSize() const
Definition: atlsimpcoll.h:104
BOOL GetEnvironmentVariable(_In_z_ PCXSTR pszVar)
Definition: cstringt.h:658
BOOL IsIconic() const
Definition: atlwin.h:932
HWND GetLastActivePopup() const
Definition: atlwin.h:676
HWND SetFocus()
Definition: atlwin.h:1198
BOOL DestroyWindow()
Definition: atlwin.h:462
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1116
HDC GetWindowDC()
Definition: atlwin.h:784
HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
Definition: atlwin.h:456
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:816
CWindow GetParent() const
Definition: atlwin.h:700
BOOL IsWindowVisible() const
Definition: atlwin.h:958
HWND m_hWnd
Definition: atlwin.h:273
BOOL IsWindow() const
Definition: atlwin.h:947
BOOL IsWindowEnabled() const
Definition: atlwin.h:952
BOOL PostMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1044
HIMAGELIST m_ImageList
Definition: traywnd.cpp:197
VOID Initialize()
Definition: traywnd.cpp:256
VOID UpdateFont()
Definition: traywnd.cpp:240
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:307
SIZE GetSize()
Definition: traywnd.cpp:219
VOID UpdateSize()
Definition: traywnd.cpp:224
HWND Create(HWND hwndParent)
Definition: traywnd.cpp:276
HFONT m_Font
Definition: traywnd.cpp:199
virtual ~CStartButton()
Definition: traywnd.cpp:210
LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL PtInButton(LPPOINT pt) const
HRESULT Initialize(ITrayWindow *pTrayWnd, IN HWND hWndOwner)
Definition: traywnd.cpp:3561
virtual HRESULT STDMETHODCALLTYPE QueryContextMenu(HMENU hPopup, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
Definition: traywnd.cpp:3570
virtual ~CTrayWindowCtxMenu()
Definition: traywnd.cpp:3673
CComPtr< CTrayWindow > TrayWnd
Definition: traywnd.cpp:3556
virtual HRESULT STDMETHODCALLTYPE GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
Definition: traywnd.cpp:3660
CComPtr< IContextMenu > pcm
Definition: traywnd.cpp:3557
virtual HRESULT STDMETHODCALLTYPE InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
Definition: traywnd.cpp:3630
LRESULT OnHotkey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3070
LRESULT OnEnterSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2669
VOID OpenTaskManager(IN HWND hWndOwner)
Definition: traywnd.cpp:627
DWORD m_DraggingPosition
Definition: traywnd.cpp:353
LRESULT OnSettingChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2446
HWND m_TaskSwitch
Definition: traywnd.cpp:345
VOID ResizeWorkArea()
Definition: traywnd.cpp:1536
VOID ToggleDesktop()
Definition: traywnd.cpp:637
DWORD Flags
Definition: traywnd.cpp:373
LRESULT OnExitSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2681
LRESULT OnThemeChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2426
HWND m_Rebar
Definition: traywnd.cpp:344
VOID ShowDesktop()
Definition: traywnd.cpp:3137
LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2523
LRESULT OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3328
DWORD GetDraggingRectFromPt(IN POINT pt, OUT RECT *pRect, OUT HMONITOR *phMonitor)
Definition: traywnd.cpp:1285
HMONITOR m_Monitor
Definition: traywnd.cpp:351
DWORD IgnorePulse
Definition: traywnd.cpp:380
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3174
CStartButton m_StartButton
Definition: traywnd.cpp:331
LRESULT OnDoExitWindows(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3010
HWND STDMETHODCALLTYPE GetHWND()
Definition: traywnd.cpp:2200
void FitToRebar(PRECT pRect)
Definition: traywnd.cpp:1832
LRESULT HandleCommand(UINT uCommand)
Definition: traywnd.cpp:788
VOID RestoreAll()
Definition: traywnd.cpp:3142
LRESULT OnCtlColorBtn(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2539
CComPtr< ITrayBandSite > m_TrayBandSite
Definition: traywnd.cpp:369
int DrawSizerWithTheme(IN HRGN hRgn)
Definition: traywnd.cpp:2102
HMONITOR GetScreenRectFromRect(IN OUT RECT *pRect, IN DWORD dwFlags)
Definition: traywnd.cpp:1058
DWORD m_Position
Definition: traywnd.cpp:350
HTHEME m_Theme
Definition: traywnd.cpp:339
BOOL STDMETHODCALLTYPE IsHorizontal()
Definition: traywnd.cpp:2211
TRACKMOUSEEVENT m_MouseTrackingInfo
Definition: traywnd.cpp:364
CComPtr< IDeskBand > m_TaskBand
Definition: traywnd.cpp:337
HMONITOR m_PreviousMonitor
Definition: traywnd.cpp:352
HDPA m_ShellServices
Definition: traywnd.cpp:366
LRESULT OnInitMenuPopup(INT code, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3241
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2477
DWORD WINAPI TrayPropertiesThread()
Definition: traywnd.cpp:554
SIZE m_TraySize
Definition: traywnd.cpp:357
LRESULT OnNcCalcSize(INT code, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3212
void RestoreMinimizedNonTaskWnds(BOOL bDestroyed, HWND hwndActive)
Definition: traywnd.cpp:3037
virtual HRESULT STDMETHODCALLTYPE RegisterDesktopWindow(IN HWND hWndDesktop)
Definition: traywnd.cpp:3501
HMONITOR GetScreenRect(IN HMONITOR hMonitor, IN OUT RECT *pRect)
Definition: traywnd.cpp:1110
DWORD InSizeMove
Definition: traywnd.cpp:377
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2926
RECT m_TrayRects[4]
Definition: traywnd.cpp:356
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2501
static DWORD WINAPI s_RunFileDlgThread(IN OUT PVOID pParam)
Definition: traywnd.cpp:531
VOID RegLoadSettings()
Definition: traywnd.cpp:1610
LRESULT OnNcRButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2848
VOID TrayProcessMessages()
Definition: traywnd.cpp:3434
HMONITOR m_DraggingMonitor
Definition: traywnd.cpp:354
HRESULT STDMETHODCALLTYPE GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
Definition: traywnd.cpp:2310
LRESULT OnEndSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2419
virtual HRESULT STDMETHODCALLTYPE Unknown(IN DWORD dwUnknown1, IN DWORD dwUnknown2)
Definition: traywnd.cpp:3509
BOOL STDMETHODCALLTYPE IsTaskWnd(HWND hWnd)
Definition: traywnd.cpp:2269
BOOL IsPointWithinShowDesktopButton(LPPOINT ppt, LPRECT prcShowDesktopBtn, PWINDOWINFO pwi)
Definition: traywnd.cpp:2800
BOOL IsPosHorizontal()
Definition: traywnd.cpp:1223
LRESULT EraseBackgroundWithTheme(HDC hdc)
Definition: traywnd.cpp:2086
CComPtr< IMenuPopup > m_StartMenuPopup
Definition: traywnd.cpp:335
HWND STDMETHODCALLTYPE DisplayProperties()
Definition: traywnd.cpp:590
VOID AdjustSizerRect(RECT *rc, DWORD pos)
Definition: traywnd.cpp:1148
HMONITOR CalculateValidSize(IN DWORD Position, IN OUT RECT *pRect)
Definition: traywnd.cpp:1228
void ProcessMouseTracking()
Definition: traywnd.cpp:1915
LRESULT OnNcLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2960
LRESULT OnNcLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2824
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2413
BOOL STDMETHODCALLTYPE Lock(IN BOOL bLock)
Definition: traywnd.cpp:2216
VOID ApplyClipping(IN BOOL Clip)
Definition: traywnd.cpp:1499
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2858
static BOOL CALLBACK MinimizeWindowsProc(HWND hwnd, LPARAM lParam)
Definition: traywnd.cpp:3091
HRESULT STDMETHODCALLTYPE Open()
Definition: traywnd.cpp:2150
LRESULT OnGetTaskSwitch(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3031
HRESULT WINAPI ContextSensitiveHelp(BOOL fEnterMode)
Definition: traywnd.cpp:3529
LRESULT OnSysChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2694
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3186
HRESULT ExecResourceCmd(int id)
Definition: traywnd.cpp:443
static DWORD WINAPI s_TrayPropertiesThread(IN OUT PVOID pParam)
Definition: traywnd.cpp:583
VOID OpenCommonStartMenuDirectory(IN HWND hWndOwner, IN LPCTSTR lpOperation)
Definition: traywnd.cpp:609
DWORD IsDragging
Definition: traywnd.cpp:378
static BOOL IsDialog(HWND hwnd)
Definition: traywnd.cpp:3084
HRESULT STDMETHODCALLTYPE Close()
Definition: traywnd.cpp:2187
VOID CheckTrayWndPosition()
Definition: traywnd.cpp:1588
LRESULT OnNcLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2970
LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3020
CComPtr< IUnknown > m_TrayNotifyInstance
Definition: traywnd.cpp:348
UINT m_AutoHideState
Definition: traywnd.cpp:362
LRESULT OnMoving(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2600
void PopupStartMenu()
Definition: traywnd.cpp:1874
void UpdateFonts()
Definition: traywnd.cpp:1027
LRESULT HandleHotKey(DWORD id)
Definition: traywnd.cpp:742
LRESULT OnSizing(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2622
CTrayShowDesktopButton * m_pShowDesktopButton
Definition: traywnd.cpp:332
VOID AlignControls(IN PRECT prcClient OPTIONAL)
Definition: traywnd.cpp:1688
LRESULT OnOpenStartMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2995
HRESULT WINAPI GetWindow(HWND *phwnd)
Definition: traywnd.cpp:3521
HWND m_TrayPropertiesOwner
Definition: traywnd.cpp:359
void DrawShowDesktopButton()
Definition: traywnd.cpp:2516
SIZE m_AutoHideOffset
Definition: traywnd.cpp:363
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2643
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3158
LRESULT OnAppTrayDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2989
VOID MakeTrayRectWithSize(IN DWORD Position, IN const SIZE *pTraySize, IN OUT RECT *pRect)
Definition: traywnd.cpp:1177
HRESULT STDMETHODCALLTYPE InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
Definition: traywnd.cpp:2302
VOID HideStartMenu()
Definition: traywnd.cpp:737
VOID TrayMessageLoop()
Definition: traywnd.cpp:3454
DWORD GetDraggingRectFromRect(IN OUT RECT *pRect, OUT HMONITOR *phMonitor)
Definition: traywnd.cpp:1387
BOOL STDMETHODCALLTYPE IsSpecialHWND(IN HWND hWnd)
Definition: traywnd.cpp:2205
virtual ~CTrayWindow()
Definition: traywnd.cpp:412
HWND m_RunFileDlgOwner
Definition: traywnd.cpp:360
LRESULT OnPulse(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3058
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2545
VOID MinimizeAll(BOOL bShowDesktop=FALSE)
Definition: traywnd.cpp:3119
VOID GetTrayRectFromScreenRect(IN DWORD Position, IN const RECT *pScreen, IN const SIZE *pTraySize OPTIONAL, OUT RECT *pRect)
Definition: traywnd.cpp:1202
LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2982
virtual HRESULT RaiseStartButton()
Definition: traywnd.cpp:3515
HMONITOR GetMonitorFromRect(IN const RECT *pRect)
Definition: traywnd.cpp:1085
LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:3204
UINT TrackMenu(IN HMENU hMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN BOOL IsContextMenu)
Definition: traywnd.cpp:876
DWORD WINAPI RunFileDlgThread()
Definition: traywnd.cpp:495
virtual HRESULT STDMETHODCALLTYPE GetTrayWindow(OUT HWND *phWndTray)
Definition: traywnd.cpp:3494
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2326
DWORD NewPosSize
Definition: traywnd.cpp:379
HRESULT TrackCtxMenu(IN IContextMenu *contextMenu, IN POINT *ppt OPTIONAL, IN HWND hwndExclude OPTIONAL, IN BOOL TrackUp, IN PVOID Context OPTIONAL)
Definition: traywnd.cpp:947
virtual ULONG STDMETHODCALLTYPE GetState()
Definition: traywnd.cpp:3487
LRESULT OnDisplayChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2490
void _Init()
Definition: traywnd.cpp:3534
LRESULT OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: traywnd.cpp:2637
BOOL IsPointWithinStartButton(LPPOINT ppt, LPRECT prcStartBtn, PWINDOWINFO pwi)
Definition: traywnd.cpp:2757
CComPtr< IMenuBand > m_StartMenuBand
Definition: traywnd.cpp:334
HFONT m_Font
Definition: traywnd.cpp:341
LRESULT DoExitWindows()
Definition: traywnd.cpp:475
void ProcessAutoHide()
Definition: traywnd.cpp:1965
HWND m_DesktopWnd
Definition: traywnd.cpp:343
VOID ChangingWinPos(IN OUT LPWINDOWPOS pwp)
Definition: traywnd.cpp:1405
CComPtr< IContextMenu > m_ContextMenu
Definition: traywnd.cpp:338
void SaveState()
Definition: traywnd.cpp:467
HRESULT STDMETHODCALLTYPE QueryContextMenu(HMENU hPopup, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
Definition: traywnd.cpp:2286
LRESULT OnRebarAutoSize(INT code, LPNMHDR nmhdr, BOOL &bHandled)
Definition: traywnd.cpp:3277
BOOL STDMETHODCALLTYPE ExecContextMenuCmd(IN UINT uiCmd)
Definition: traywnd.cpp:649
void DisplayRunFileDlg()
Definition: traywnd.cpp:537
HWND m_TrayNotify
Definition: traywnd.cpp:346
WPARAM wParam
Definition: combotst.c:138
struct @1628 Msg[]
LPARAM lParam
Definition: combotst.c:139
static HWND hwndParent
Definition: cryptui.c:300
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
ush Pos
Definition: deflate.h:92
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT uFlags
Definition: api.c:59
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, COLORREF clrMask, UINT uType, UINT uFlags)
Definition: imagelist.c:2208
#define CloseHandle
Definition: compat.h:739
#define wcschr
Definition: compat.h:17
#define SetLastError(x)
Definition: compat.h:752
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4261
EXTERN_C int WINAPI LogoffWindowsDialog(HWND hWndOwner)
Definition: dialogs.cpp:1545
void WINAPI ExitWindowsDialog(HWND hWndOwner)
Definition: dialogs.cpp:1608
void WINAPI RunFileDlg(HWND hWndOwner, HICON hIcon, LPCWSTR lpstrDirectory, LPCWSTR lpstrTitle, LPCWSTR lpstrDescription, UINT uFlags)
Definition: dialogs.cpp:409
EXTERN_C BOOL WINAPI SHFindComputer(LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlSavedSearch)
Definition: utils.cpp:750
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1083
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1332
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
Definition: draw.c:128
HRESULT WINAPI GetThemePartSize(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, RECT *prc, THEMESIZE eSize, SIZE *psz)
Definition: draw.c:1777
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:835
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950
#define pt(x, y)
Definition: drawing.c:79
#define PtrToUlong(u)
Definition: config.h:107
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLsizeiptr size
Definition: glext.h:5919
GLenum const GLfloat * params
Definition: glext.h:5645
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MOD_SHIFT
Definition: imm.h:186
#define MOD_CONTROL
Definition: imm.h:185
#define UINT_MAX
Definition: limits.h:41
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define TEXT(s)
Definition: k32.h:26
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define END_COM_MAP()
Definition: atlcom.h:592
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define NOTIFY_CODE_HANDLER(cd, func)
Definition: atlwin.h:1980
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define ALT_MSG_MAP(map)
Definition: atlwin.h:1913
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
Definition: atlwin.h:2004
if(dx< 0)
Definition: linetemp.h:194
static VOID SetFont(PMAP infoPtr, LPWSTR lpFontName)
Definition: map.c:220
#define ASSERT(a)
Definition: mode.c:44
#define SetWindowStyle(hwnd, val)
Definition: utility.h:153
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static HRGN hRgn
Definition: mapping.c:33
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
HMONITOR WINAPI MonitorFromPoint(POINT, DWORD)
HMONITOR WINAPI MonitorFromRect(LPCRECT, DWORD)
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
unsigned int UINT
Definition: ndis.h:50
VOID ShowCustomizeNotifyIcons(HINSTANCE hInst, HWND hExplorer)
#define DWORD
Definition: nt_native.h:44
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define L(x)
Definition: ntvdm.h:50
const GUID IID_IOleWindow
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPED
Definition: pedump.c:615
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_BORDER
Definition: pedump.c:625
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define WS_DISABLED
Definition: pedump.c:621
#define SS_LEFT
Definition: pedump.c:692
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define BS_PUSHBUTTON
Definition: pedump.c:651
#define WS_THICKFRAME
Definition: pedump.c:630
#define RBSTR_CHANGERECT
Definition: commctrl.h:1596
#define BUTTON_IMAGELIST_ALIGN_LEFT
Definition: commctrl.h:4627
#define TB_GETBUTTONSIZE
Definition: commctrl.h:1160
#define BCM_GETIDEALSIZE
Definition: commctrl.h:4639
#define CCS_VERT
Definition: commctrl.h:2249
#define BCM_SETIMAGELIST
Definition: commctrl.h:4642
#define RBN_AUTOSIZE
Definition: commctrl.h:1631
#define RB_SIZETORECT
Definition: commctrl.h:1598
#define WC_STATIC
Definition: commctrl.h:4682
struct tagNMRBAUTOSIZE * LPNMRBAUTOSIZE
#define WC_BUTTON
Definition: commctrl.h:4625
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
#define DefWindowProc
Definition: ros2win.h:31
#define RFF_CALCDIRECTORY
Definition: run.h:35
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define memset(x, y, z)
Definition: compat.h:39
#define ABE_BOTTOM
Definition: shellapi.h:20
#define ShellExecute
Definition: shellapi.h:693
#define ABE_RIGHT
Definition: shellapi.h:19
#define ABE_TOP
Definition: shellapi.h:18
#define ABE_LEFT
Definition: shellapi.h:17
#define ABN_WINDOWARRANGE
Definition: shellapi.h:75
BOOL WINAPI SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile)
Definition: shellord.c:2462
HRESULT HResultFromWin32(DWORD hr)
Definition: shellutils.h:70
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2513
HRESULT hr
Definition: shlfolder.c:183
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define SHGetSpecialFolderPath
Definition: shlobj.h:1530
#define CSIDL_COMMON_STARTMENU
Definition: shlobj.h:2193
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2528
#define MM_ADDSEPARATOR
Definition: shlobj.h:2527
@ REST_CLASSICSHELL
Definition: shlobj.h:1679
@ REST_NOSAVESET
Definition: shlobj.h:1644
@ REST_NOTRAYCONTEXTMENU
Definition: shlobj.h:1667
@ REST_NOCLOSE
Definition: shlobj.h:1643
@ DBID_BANDINFOCHANGED
Definition: shobjidl.idl:2489
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:150
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
& rect
Definition: startmenu.cpp:1413
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
CSimpleArray< MINWNDPOS > * pMinimizedAll
Definition: traywnd.cpp:3080
HWND hwndDesktop
Definition: traywnd.cpp:120
HWND hwndProgman
Definition: traywnd.cpp:121
BOOL bMustBeInMonitor
Definition: traywnd.cpp:123
WINDOWPLACEMENT wndpl
Definition: traywnd.cpp:184
HWND hwnd
Definition: traywnd.cpp:183
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
TW_STRUCKRECTS2 sr
Definition: precomp.h:225
WINDOWPLACEMENT wplt
Definition: traywnd.cpp:66
Definition: dpa.c:49
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
DWORD AutoHide
Definition: precomp.h:204
DWORD AlwaysOnTop
Definition: precomp.h:205
DWORD SmSmallIcons
Definition: precomp.h:206
DWORD Position
Definition: precomp.h:210
UINT flags
Definition: winuser.h:3594
Definition: inflate.c:139
ULONG_PTR dwData
Definition: winuser.h:3001
LPWSTR dwTypeData
Definition: winuser.h:3269
RECT rcMonitor
Definition: winuser.h:3785
DWORD cbSize
Definition: winuser.h:3784
PWINDOWPOS lppos
Definition: winuser.h:3599
UINT code
Definition: winuser.h:3159
HWND hwndFrom
Definition: winuser.h:3157
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
RECT rcExclude
Definition: winuser.h:3576
UINT cbSize
Definition: winuser.h:3575
UINT cxWindowBorders
Definition: winuser.h:3772
UINT cyWindowBorders
Definition: winuser.h:3773
RECT rcWindow
Definition: winuser.h:3767
static COORD Position
Definition: mouse.c:34
#define max(a, b)
Definition: svc.c:63
#define AUTOHIDE_DELAY_HIDE
Definition: traywnd.cpp:34
const GUID IID_IShellDesktopTray
Definition: traywnd.cpp:192
#define IDHK_NEXT_TASK
Definition: traywnd.cpp:53
@ TILED
Definition: traywnd.cpp:61
@ NONE
Definition: traywnd.cpp:61
@ CASCADED
Definition: traywnd.cpp:61
#define AUTOHIDE_SHOWN
Definition: traywnd.cpp:43
static BOOL CALLBACK BackupWindowsPosProc(HWND hwnd, LPARAM lParam)
Definition: traywnd.cpp:70
CSimpleArray< WINDOWPOSBACKUPDATA > g_WindowPosBackup
Definition: traywnd.cpp:68
#define IDHK_RUN
Definition: traywnd.cpp:46
#define AUTOHIDE_SPEED_HIDE
Definition: traywnd.cpp:39
#define WM_APP_TRAYDESTROY
Definition: traywnd.cpp:29
CSimpleArray< MINWNDPOS > g_MinimizedAll
Definition: traywnd.cpp:186
LRESULT appbar_message(COPYDATASTRUCT *cds)
Definition: appbar.cpp:229
#define AUTOHIDE_SPEED_SHOW
Definition: traywnd.cpp:38
void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam)
Definition: appbar.cpp:78
HRESULT Tray_OnStartMenuDismissed(ITrayWindow *Tray)
Definition: traywnd.cpp:3705
#define AUTOHIDE_SHOWING
Definition: traywnd.cpp:42
HRESULT CreateTrayWindow(ITrayWindow **ppTray)
Definition: traywnd.cpp:3690
#define IDHK_DESKTOP
Definition: traywnd.cpp:56
BOOL CanBeMinimized(HWND hwnd)
Definition: traywnd.cpp:102
#define IDHK_EXPLORE
Definition: traywnd.cpp:50
#define TIMER_IGNOREPULSERESET_TIMEOUT
Definition: traywnd.cpp:2411
enum @96 g_Arrangement
static BOOL IsThereAnyEffectiveWindow(BOOL bMustBeInMonitor)
Definition: traywnd.cpp:167
#define AUTOHIDE_HIDING
Definition: traywnd.cpp:44
#define IDHK_MINIMIZE_ALL
Definition: traywnd.cpp:47
#define IDHK_RESTORE_ALL
Definition: traywnd.cpp:48
#define IDHK_SYS_PROPERTIES
Definition: traywnd.cpp:55
#define IDHK_PREV_TASK
Definition: traywnd.cpp:54
#define TIMER_ID_AUTOHIDE
Definition: traywnd.cpp:31
static BOOL CALLBACK FindEffectiveProc(HWND hwnd, LPARAM lParam)
Definition: traywnd.cpp:127
#define AUTOHIDE_HIDDEN
Definition: traywnd.cpp:41
VOID RestoreWindowPos()
Definition: traywnd.cpp:90
#define IDHK_FIND
Definition: traywnd.cpp:51
#define AUTOHIDE_INTERVAL_ANIMATING
Definition: traywnd.cpp:36
static const WCHAR szTrayWndClass[]
Definition: traywnd.cpp:59
#define TIMER_ID_MOUSETRACK
Definition: traywnd.cpp:32
VOID BackupWindowPos()
Definition: traywnd.cpp:85
#define IDHK_HELP
Definition: traywnd.cpp:49
#define IDHK_FIND_COMPUTER
Definition: traywnd.cpp:52
#define TIMER_ID_IGNOREPULSERESET
Definition: traywnd.cpp:2410
#define AUTOHIDE_DELAY_SHOW
Definition: traywnd.cpp:35
#define MOUSETRACK_INTERVAL
Definition: traywnd.cpp:33
HRESULT TrayWindowCtxMenuCreator(ITrayWindow *TrayWnd, IN HWND hWndOwner, IContextMenu **ppCtxMenu)
Definition: traywnd.cpp:3682
#define IDHK_PAGER
Definition: traywnd.cpp:57
#define GetWindowLongPtr
Definition: treelist.c:73
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define OUT
Definition: typedefs.h:40
#define TRAYCMD_CONTROL_PANEL
Definition: undocshell.h:860
#define TRAYCMD_STARTMENU
Definition: undocshell.h:844
#define TRAYCMD_LOCK_DESKTOP
Definition: undocshell.h:863
#define TRAYCMD_DATE_AND_TIME
Definition: undocshell.h:851
#define TRAYCMD_SEARCH_COMPUTERS
Definition: undocshell.h:866
#define TRAYCMD_TASKBAR_PROPERTIES
Definition: undocshell.h:852
#define TRAYCMD_SHOW_DESKTOP
Definition: undocshell.h:855
#define TABDMC_APPBAR
Definition: undocshell.h:869
#define TWM_DOEXITWINDOWS
Definition: undocshell.h:54
#define TRAYCMD_TILE_V
Definition: undocshell.h:849
#define TRAYCMD_LOCK_TASKBAR
Definition: undocshell.h:858
#define TRAYCMD_SEARCH_FILES
Definition: undocshell.h:865
#define TRAYCMD_CUSTOMIZE_TASKBAR
Definition: undocshell.h:857
#define TRAYCMD_TILE_H
Definition: undocshell.h:848
#define TRAYCMD_TOGGLE_DESKTOP
Definition: undocshell.h:850
#define WM_PROGMAN_SAVESTATE
Definition: undocshell.h:61
#define TRAYCMD_RUN_DIALOG
Definition: undocshell.h:845
#define TABDMC_LOADINPROC
Definition: undocshell.h:871
#define TRAYCMD_LOGOFF_DIALOG
Definition: undocshell.h:846
#define TRAYCMD_CASCADE
Definition: undocshell.h:847
#define TRAYCMD_SHOW_TASK_MGR
Definition: undocshell.h:856
#define TRAYCMD_RESTORE_ALL
Definition: undocshell.h:854
#define TRAYCMD_SHUTDOWN_DIALOG
Definition: undocshell.h:861
#define TRAYCMD_PRINTERS_AND_FAXES
Definition: undocshell.h:862
#define TRAYCMD_MINIMIZE_ALL
Definition: undocshell.h:853
#define TABDMC_NOTIFY
Definition: undocshell.h:870
#define TRAYCMD_SWITCH_USER_DIALOG
Definition: undocshell.h:864
#define TRAYCMD_HELP_AND_SUPPORT
Definition: undocshell.h:859
#define WC_DIALOG
Definition: undocuser.h:11
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
@ TBP_BACKGROUNDLEFT
Definition: vssym32.h:560
@ TBP_SIZINGBARRIGHT
Definition: vssym32.h:562
@ TBP_SIZINGBARBOTTOM
Definition: vssym32.h:561
@ TBP_BACKGROUNDRIGHT
Definition: vssym32.h:558
@ TBP_BACKGROUNDTOP
Definition: vssym32.h:559
@ TBP_SIZINGBARLEFT
Definition: vssym32.h:564
@ TBP_BACKGROUNDBOTTOM
Definition: vssym32.h:557
@ TBP_SIZINGBARTOP
Definition: vssym32.h:563
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
#define PRECT
Definition: precomp.h:27
BOOL WINAPI IsHungAppWindow(HWND hwnd)
Definition: window.c:1847
static MONITORINFO mi
Definition: win.c:7338
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_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 SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:542
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define S_FALSE
Definition: winerror.h:2357
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define FW_BOLD
Definition: wingdi.h:378
#define TRANSPARENT
Definition: wingdi.h:950
#define HOLLOW_BRUSH
Definition: wingdi.h:899
#define FW_NORMAL
Definition: wingdi.h:373
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
HRGN WINAPI CreateRectRgnIndirect(_In_ LPCRECT)
#define CreateFontIndirect
Definition: wingdi.h:4444
#define SW_SHOWNORMAL
Definition: winuser.h:770
HWND WINAPI ChildWindowFromPoint(_In_ HWND, _In_ POINT)
#define GW_OWNER
Definition: winuser.h:766
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1625
#define CreateWindowEx
Definition: winuser.h:5764
#define GetMonitorInfo
Definition: winuser.h:5800
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define BM_GETSTATE
Definition: winuser.h:1920
#define WM_CLOSE
Definition: winuser.h:1621
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define MF_BYCOMMAND
Definition: winuser.h:202
#define WM_SYSCOMMAND
Definition: winuser.h:1741
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define GetWindowLongPtrW
Definition: winuser.h:4829
#define LR_LOADTRANSPARENT
Definition: winuser.h:1093
#define VK_TAB
Definition: winuser.h:2199
#define SM_CYEDGE
Definition: winuser.h:1009
#define SWP_FRAMECHANGED
Definition: winuser.h:1240
#define WM_QUIT
Definition: winuser.h:1623
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define MIIM_ID
Definition: winuser.h:722
#define WM_KEYUP
Definition: winuser.h:1716
#define SM_CYSCREEN
Definition: winuser.h:960
#define HTCAPTION
Definition: winuser.h:2476
#define HWND_TOPMOST
Definition: winuser.h:1208
#define SM_CXEDGE
Definition: winuser.h:1008
#define BST_UNCHECKED
Definition: winuser.h:199
#define MOD_WIN
Definition: winuser.h:2644
#define WM_WINDOWPOSCHANGING
Definition: winuser.h:1661
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
#define TPM_RIGHTBUTTON
Definition: winuser.h:2380
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1608
BOOL WINAPI GetWindowInfo(_In_ HWND, _Inout_ PWINDOWINFO)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define WS_EX_APPWINDOW
Definition: winuser.h:383
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
struct tagWINDOWINFO WINDOWINFO
#define HTBOTTOM
Definition: winuser.h:2493
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define VK_SPACE
Definition: winuser.h:2219
#define HTBORDER
Definition: winuser.h:2497
#define WM_SIZE
Definition: winuser.h:1611
WORD WINAPI CascadeWindows(_In_opt_ HWND hwndParent, _In_ UINT wHow, _In_opt_ CONST RECT *lpRect, _In_ UINT cKids, _In_reads_opt_(cKids) const HWND FAR *lpKids)
int WINAPI SetWindowRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define BM_SETSTATE
Definition: winuser.h:1923
#define LR_CREATEDIBSECTION
Definition: winuser.h:1098
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#define TPM_BOTTOMALIGN
Definition: winuser.h:2385
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define VK_CONTROL
Definition: winuser.h:2203
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2714
#define WM_NCHITTEST
Definition: winuser.h:1686
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
BOOL WINAPI SetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_CHECKED
Definition: winuser.h:132
#define SWP_NOSIZE
Definition: winuser.h:1245
#define WM_MOUSEMOVE
Definition: winuser.h:1775
#define RDW_UPDATENOW
Definition: winuser.h:1220
#define RDW_ERASE
Definition: winuser.h:1211
#define CS_DBLCLKS
Definition: winuser.h:651
HMENU WINAPI GetSystemMenu(_In_ HWND, _In_ BOOL)
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
HWND WINAPI ChildWindowFromPointEx(_In_ HWND, _In_ POINT, _In_ UINT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define VK_F1
Definition: winuser.h:2255
#define VK_PAUSE
Definition: winuser.h:2205
#define MF_UNCHECKED
Definition: winuser.h:204
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1694
#define TPM_TOPALIGN
Definition: winuser.h:2383
BOOL WINAPI IsIconic(_In_ HWND)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define SC_SIZE
Definition: winuser.h:2584
#define SPIF_SENDCHANGE
Definition: winuser.h:1572
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
#define SC_MINIMIZE
Definition: winuser.h:2586
#define WM_SETTINGCHANGE
Definition: winuser.h:1629
#define WM_CTLCOLORBTN
Definition: winuser.h:1769
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define GetMessage
Definition: winuser.h:5799
#define WM_NCMOUSEMOVE
Definition: winuser.h:1691
WORD WINAPI TileWindows(_In_opt_ HWND hwndParent, _In_ UINT wHow, _In_opt_ CONST RECT *lpRect, _In_ UINT cKids, _In_reads_opt_(cKids) const HWND FAR *lpKids)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_NCACTIVATE
Definition: winuser.h:1688
#define WM_SYSCHAR
Definition: winuser.h:1721
#define CWP_SKIPDISABLED
Definition: winuser.h:209
BOOL WINAPI RegisterHotKey(_In_opt_ HWND, _In_ int, _In_ UINT, _In_ UINT)
#define WM_EXITSIZEMOVE
Definition: winuser.h:1824
#define WM_INITMENUPOPUP
Definition: winuser.h:1746
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
#define MF_ENABLED
Definition: winuser.h:128
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
#define BS_LEFT
Definition: winuser.h:265
#define RDW_ALLCHILDREN
Definition: winuser.h:1221
#define WM_SETFONT
Definition: winuser.h:1650
#define WM_TIMER
Definition: winuser.h:1742
#define BST_PUSHED
Definition: winuser.h:201
#define PM_REMOVE
Definition: winuser.h:1196
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
#define HTRIGHT
Definition: winuser.h:2489
#define RDW_ERASENOW
Definition: winuser.h:1219
#define RDW_FRAME
Definition: winuser.h:1212
#define SWP_SHOWWINDOW
Definition: winuser.h:1248
#define WM_COPYDATA
Definition: winuser.h:1664
#define WM_NULL
Definition: winuser.h:1607
#define SendMessage
Definition: winuser.h:5852
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define PeekMessage
Definition: winuser.h:5839
#define BS_VCENTER
Definition: winuser.h:279
#define TPM_VERTICAL
Definition: winuser.h:2382
#define SM_CXSIZEFRAME
Definition: winuser.h:993
#define SC_CLOSE
Definition: winuser.h:2592
#define SC_MOVE
Definition: winuser.h:2585
#define GetWindowLong
Definition: winuser.h:5805
#define SM_CXDLGFRAME
Definition: winuser.h:966
#define WM_LBUTTONUP
Definition: winuser.h:1777
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
BOOL WINAPI IsWindowEnabled(_In_ HWND)
#define PostMessage
Definition: winuser.h:5841
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define GetClassLongPtrW
Definition: winuser.h:4564
#define CWP_SKIPINVISIBLE
Definition: winuser.h:208
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define WM_SIZING
Definition: winuser.h:1807
#define SIZE_RESTORED
Definition: winuser.h:2505
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
#define WM_NCLBUTTONUP
Definition: winuser.h:1693
#define HTTOP
Definition: winuser.h:2490
#define MDITILE_SKIPDISABLED
Definition: winuser.h:2187
#define SWP_NOOWNERZORDER
Definition: winuser.h:1249
#define WM_HOTKEY
Definition: winuser.h:1879
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define VK_SHIFT
Definition: winuser.h:2202
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SM_CYDLGFRAME
Definition: winuser.h:968
#define MFT_STRING
Definition: winuser.h:746
#define MDITILE_HORIZONTAL
Definition: winuser.h:2188
#define WM_DESTROY
Definition: winuser.h:1609
#define WM_NCRBUTTONUP
Definition: winuser.h:1696
#define SM_CXSCREEN
Definition: winuser.h:959
#define DispatchMessage
Definition: winuser.h:5774
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
HWND WINAPI FindWindowW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
#define WM_MOVING
Definition: winuser.h:1809
#define WM_ENDSESSION
Definition: winuser.h:1627
#define GW_CHILD
Definition: winuser.h:763
#define MDITILE_VERTICAL
Definition: winuser.h:2189
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2207
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define SWP_NOZORDER
Definition: winuser.h:1247
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define HTLEFT
Definition: winuser.h:2487
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define RDW_INTERNALPAINT
Definition: winuser.h:1213
#define WM_NCCALCSIZE
Definition: winuser.h:1685
#define GWL_STYLE
Definition: winuser.h:852
BOOL WINAPI SetWindowPlacement(_In_ HWND hWnd, _In_ const WINDOWPLACEMENT *)
#define SM_CMONITORS
Definition: winuser.h:1040
#define SWP_NOSENDCHANGING
Definition: winuser.h:1251
#define SC_RESTORE
Definition: winuser.h:2598
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define SM_CYCAPTION
Definition: winuser.h:963
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
#define SM_CYSIZEFRAME
Definition: winuser.h:995
int WINAPI GetSystemMetrics(_In_ int)
#define SW_NORMAL
Definition: winuser.h:769
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:777
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1692
#define GCW_ATOM
Definition: winuser.h:661
#define MIIM_TYPE
Definition: winuser.h:725
#define RDW_INVALIDATE
Definition: winuser.h:1214
#define HWND_BOTTOM
Definition: winuser.h:1205
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SC_MAXIMIZE
Definition: winuser.h:2588
SHORT WINAPI GetKeyState(_In_ int)
#define VK_MENU
Definition: winuser.h:2204
#define WM_NCPAINT
Definition: winuser.h:1687
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define GWL_EXSTYLE
Definition: winuser.h:851
#define MF_GRAYED
Definition: winuser.h:129
#define COLOR_3DFACE
Definition: winuser.h:929
#define WM_ENTERSIZEMOVE
Definition: winuser.h:1823
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
#define IID_PPV_ARG(Itype, ppType)
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185