ReactOS 0.4.15-dev-5666-gc548b97
appswitch.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: win32ss/user/user32/controls/appswitch.c
5 * PURPOSE: app switching functionality
6 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
7 * David Quintana (gigaherz@gmail.com)
8 * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
9 */
10
11//
12// TODO:
13// Move to Win32k.
14// Add registry support.
15//
16//
17
18#include <user32.h>
19
21
22#define DIALOG_MARGIN 8 // margin of dialog contents
23
24#define CX_ICON 32 // width of icon
25#define CY_ICON 32 // height of icon
26#define ICON_MARGIN 4 // margin width around an icon
27
28#define CX_ITEM (CX_ICON + 2 * ICON_MARGIN)
29#define CY_ITEM (CY_ICON + 2 * ICON_MARGIN)
30#define ITEM_MARGIN 4 // margin width around an item
31
32#define CX_ITEM_SPACE (CX_ITEM + 2 * ITEM_MARGIN)
33#define CY_ITEM_SPACE (CY_ITEM + 2 * ITEM_MARGIN)
34
35#define CY_TEXT_MARGIN 4 // margin height around text
36
37// limit the number of windows shown in the alt-tab window
38// 120 windows results in (12*40) by (10*40) pixels worth of icons.
39#define MAX_WINDOWS 120
40
41// Global variables
46
48
50
54
61
62int nShift = 0;
63
65
69
70// window style
73
75{
79
80 // FIXME: load the settings from registry
81
82 TRACE("CoolSwitch: %d\n", CoolSwitch);
83 TRACE("CoolSwitchRows: %d\n", CoolSwitchRows);
84 TRACE("CoolSwitchColumns: %d\n", CoolSwitchColumns);
85
86 return TRUE;
87}
88
90{
91 int x, y;
92 RECT Rect;
93
94 int screenwidth = GetSystemMetrics(SM_CXSCREEN);
95 int screenheight = GetSystemMetrics(SM_CYSCREEN);
96
97 x = (screenwidth - width) / 2;
98 y = (screenheight - height) / 2;
99
100 SetRect(&Rect, x, y, x + width, y + height);
102
103 x = Rect.left;
104 y = Rect.top;
105 width = Rect.right - Rect.left;
106 height = Rect.bottom - Rect.top;
108
109 ptStart.x = x;
110 ptStart.y = y;
111}
112
113void CompleteSwitch(BOOL doSwitch)
114{
115 if (!isOpen)
116 return;
117
118 isOpen = FALSE;
119
120 TRACE("[ATbot] CompleteSwitch Hiding Window.\n");
122
123 if(doSwitch)
124 {
126 return;
127
128 // FIXME: workaround because reactos fails to activate the previous window correctly.
129 //if(selectedWindow != 0)
130 {
132
134
135 TRACE("[ATbot] CompleteSwitch Switching to 0x%08x (%ls)\n", hwnd, windowText);
136
138 }
139 }
140
141 windowCount = 0;
142}
143
145{
146 HICON hIcon = NULL;
147 LRESULT bAlive;
148
150
151 // First try to get the big icon assigned to the window
152#define ICON_TIMEOUT 100 // in milliseconds
155 if (!hIcon)
156 {
157 // If no icon is assigned, try to get the icon assigned to the windows' class
159 if (!hIcon)
160 {
161 // If we still don't have an icon, see if we can do with the small icon,
162 // or a default application icon
163 if (bAlive)
164 {
165 SendMessageTimeoutW(window, WM_GETICON, ICON_SMALL2, 0,
167 (PDWORD_PTR)&hIcon);
168 }
169#undef ICON_TIMEOUT
170 if (!hIcon)
171 {
172 // using windows logo icon as default
173 hIcon = gpsi->hIconWindows;
174 if (!hIcon)
175 {
176 //if all attempts to get icon fails go to the next window
177 return TRUE;
178 }
179 }
180 }
181 }
182
185 windowCount++;
186
187 // If we got to the max number of windows, we won't be able to add any more
188 return (windowCount < MAX_WINDOWS);
189}
190
192{
193 HWND hwndOwner;
194 DWORD ExStyle, OwnerExStyle;
195
196 for (;;)
197 {
198 // A window with WS_EX_APPWINDOW is treated as if it has no owner
201 break;
202
203 // Is the owner visible?
204 // An window with WS_EX_TOOLWINDOW is treated as if it weren't visible
205 hwndOwner = GetWindow(hwnd, GW_OWNER);
206 OwnerExStyle = GetWindowLong(hwndOwner, GWL_EXSTYLE);
207 if (!IsWindowVisible(hwndOwner) || (OwnerExStyle & WS_EX_TOOLWINDOW))
208 break;
209
210 hwnd = hwndOwner;
211 }
212
213 return hwnd;
214}
215
216// c.f. http://blogs.msdn.com/b/oldnewthing/archive/2007/10/08/5351207.aspx
218{
220 RECT rc;
221 HWND hwndTry, hwndWalk;
222 WCHAR szClass[64];
223
224 // must be visible
225 if (!IsWindowVisible(hwnd))
226 return FALSE;
227
228 // must not be WS_EX_TOOLWINDOW nor WS_EX_NOACTIVATE
231 return FALSE;
232
233 // must be not empty rect
234 GetWindowRect(hwnd, &rc);
235 if (IsRectEmpty(&rc))
236 return FALSE;
237
238 // check special windows
239 if (!GetClassNameW(hwnd, szClass, _countof(szClass)) ||
240 wcscmp(szClass, L"Shell_TrayWnd") == 0 ||
241 wcscmp(szClass, L"Progman") == 0)
242 {
243 return TRUE;
244 }
245
246 // get 'nice' root owner
247 hwndWalk = GetNiceRootOwner(hwnd);
248
249 // walk back from hwndWalk toward hwnd
250 for (;;)
251 {
252 hwndTry = GetLastActivePopup(hwndWalk);
253 if (hwndTry == hwndWalk)
254 break;
255
257 if (IsWindowVisible(hwndTry) && !(ExStyle & WS_EX_TOOLWINDOW))
258 break;
259
260 hwndWalk = hwndTry;
261 }
262
263 return hwnd == hwndTry; // Reached?
264}
265
266static BOOL CALLBACK
268{
269 if (IsAltTabWindow(hwnd))
270 {
272 return FALSE;
273 }
274 return TRUE;
275}
276
278{
279 int xPos = LOWORD(lParam);
280 int yPos = HIWORD(lParam);
281
282 int xIndex = (xPos - DIALOG_MARGIN) / CX_ITEM_SPACE;
283 int yIndex = (yPos - DIALOG_MARGIN) / CY_ITEM_SPACE;
284
285 if (xIndex < 0 || nCols <= xIndex ||
286 yIndex < 0 || nRows <= yIndex)
287 {
288 return;
289 }
290
291 selectedWindow = (yIndex*nCols) + xIndex;
292 if (message == WM_MOUSEMOVE)
293 {
295 //RedrawWindow(switchdialog, NULL, NULL, 0);
296 }
297 else
298 {
299 selectedWindow = (yIndex*nCols) + xIndex;
301 }
302}
303
305{
306 HDC dialogDC;
307 PAINTSTRUCT paint;
308 RECT cRC, textRC;
309 int i, xPos, yPos, CharCount;
310 HFONT dcFont;
311 HICON hIcon;
312 HPEN hPen;
314
315 // check
316 if (nCols == 0 || nItems == 0)
317 return;
318
319 // begin painting
320 dialogDC = BeginPaint(hWnd, &paint);
321 if (dialogDC == NULL)
322 return;
323
324 // fill the client area
325 GetClientRect(hWnd, &cRC);
326 FillRect(dialogDC, &cRC, (HBRUSH)(COLOR_3DFACE + 1));
327
328 // if the selection index exceeded the display items, then
329 // do display item shifting
330 if (selectedWindow >= nItems)
332 else
333 nShift = 0;
334
335 for (i = 0; i < nItems; ++i)
336 {
337 // get the icon to display
338 hIcon = iconList[i + nShift];
339
340 // calculate the position where we start drawing
343
344 // centering
346 {
347 xPos += (itemsW - nItems * CX_ITEM_SPACE) / 2;
348 }
349
350 // if this position is selected,
351 if (selectedWindow == i + nShift)
352 {
353 // create a solid pen
355 hPen = CreatePen(PS_SOLID, 1, Color);
356
357 // draw a rectangle with using the pen
358 SelectObject(dialogDC, hPen);
360 Rectangle(dialogDC, xPos, yPos, xPos + CX_ITEM, yPos + CY_ITEM);
361 Rectangle(dialogDC, xPos + 1, yPos + 1,
362 xPos + CX_ITEM - 1, yPos + CY_ITEM - 1);
363
364 // delete the pen
365 DeleteObject(hPen);
366 }
367
368 // draw icon
369 DrawIconEx(dialogDC, xPos + ICON_MARGIN, yPos + ICON_MARGIN,
371 }
372
373 // set the text rectangle
376
377 // draw the sunken button around text
378 DrawFrameControl(dialogDC, &textRC, DFC_BUTTON,
380
381 // get text
384
385 // draw text
386 dcFont = SelectObject(dialogDC, dialogFont);
388 SetBkMode(dialogDC, TRANSPARENT);
389 DrawTextW(dialogDC, windowText, CharCount, &textRC,
391 SelectObject(dialogDC, dcFont);
392
393 // end painting
394 EndPaint(hWnd, &paint);
395}
396
398{
400 WC_SWITCH,
401 L"",
405 400, 150,
406 NULL, NULL,
407 hInstance, NULL);
408 if (!switchdialog)
409 {
410 TRACE("[ATbot] Task Switcher Window failed to create.\n");
411 return 0;
412 }
413
414 isOpen = FALSE;
415 return 1;
416}
417
419{
420 HDC tDC;
422
424
425 tDC = GetDC(0);
426 GetTextMetrics(tDC, &tm);
427 fontHeight = tm.tmHeight;
428 ReleaseDC(0, tDC);
429
430 return 1;
431}
432
434{
436
439 if (nRows > CoolSwitchRows)
440 {
442 nItems = nRows * nCols;
443 }
444
447
451
453}
454
456{
457 if (!isOpen)
458 {
459 windowCount = 0;
461
462 if (windowCount == 0)
463 return FALSE;
464
465 if (windowCount == 1)
466 {
468 return FALSE;
469 }
470
472 return FALSE;
473
474 selectedWindow = 1;
475
476 TRACE("[ATbot] HotKey Received. Opening window.\n");
479 isOpen = TRUE;
480 }
481 else
482 {
483 TRACE("[ATbot] HotKey Received Rotating.\n");
486 }
487 return TRUE;
488}
489
491{
492 HWND hwndFirst, hwndLast;
493 DWORD Size;
494
495 if (windowCount < 2 || !Esc)
496 return;
497
498 hwndFirst = windowList[0];
499 hwndLast = windowList[windowCount - 1];
500
501 if (bShift)
502 {
503 SetWindowPos(hwndLast, HWND_TOP, 0, 0, 0, 0,
506
507 SwitchToThisWindow(hwndLast, TRUE);
508
509 Size = (windowCount - 1) * sizeof(HWND);
511 windowList[0] = hwndLast;
512 }
513 else
514 {
515 SetWindowPos(hwndFirst, hwndLast, 0, 0, 0, 0,
518
520
521 Size = (windowCount - 1) * sizeof(HWND);
523 windowList[windowCount - 1] = hwndFirst;
524 }
525}
526
527static void MoveLeft(void)
528{
530 if (selectedWindow < 0)
533}
534
535static void MoveRight(void)
536{
539}
540
541static void MoveUp(void)
542{
543 INT iRow = selectedWindow / nCols;
544 INT iCol = selectedWindow % nCols;
545
546 --iRow;
547 if (iRow < 0)
548 iRow = nRows - 1;
549
550 selectedWindow = iRow * nCols + iCol;
554}
555
556static void MoveDown(void)
557{
558 INT iRow = selectedWindow / nCols;
559 INT iCol = selectedWindow % nCols;
560
561 ++iRow;
562 if (iRow >= nRows)
563 iRow = 0;
564
565 selectedWindow = iRow * nCols + iCol;
569}
570
571VOID
573{
574 // for every item of the icon list:
575 INT i;
576 for (i = 0; i < windowCount; ++i)
577 {
578 // destroy the icon
580 iconList[i] = NULL;
581 }
582}
583
585{
586 HWND hwndActive;
587 MSG msg;
588
589 // FIXME: Is loading timing OK?
591
592 if (!CoolSwitch)
593 return 0;
594
595 // Already in the loop.
596 if (switchdialog || Esc) return 0;
597
598 if (lParam == VK_ESCAPE)
599 {
600 Esc = TRUE;
601
602 windowCount = 0;
604
605 if (windowCount < 2)
606 return 0;
607
609
610 hwndActive = GetActiveWindow();
611
612 if (hwndActive == NULL)
613 {
614 Esc = FALSE;
615 return 0;
616 }
617 }
618
619 // Capture current active window.
620 hwndActive = GetActiveWindow();
621 if (hwndActive)
622 SetCapture(hwndActive);
623
624 switch (lParam)
625 {
626 case VK_TAB:
627 if (!GetDialogFont() || !ProcessHotKey())
628 goto Exit;
629 break;
630
631 case VK_ESCAPE:
632 break;
633
634 default:
635 goto Exit;
636 }
637
638 if (!hwndActive)
639 goto Exit;
640
641 // Main message loop:
642 while (1)
643 {
644 for (;;)
645 {
646 if (PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE ))
647 {
648 if (!CallMsgFilterW( &msg, MSGF_NEXTWINDOW )) break;
649 /* remove the message from the queue */
650 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
651 }
652 else
653 WaitMessage();
654 }
655
656 switch (msg.message)
657 {
658 case WM_KEYUP:
659 {
660 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
661 if (msg.wParam == VK_MENU)
662 {
664 }
665 else if (msg.wParam == VK_RETURN)
666 {
668 }
669 else if (msg.wParam == VK_ESCAPE)
670 {
671 TRACE("DoAppSwitch VK_ESCAPE 2\n");
673 }
674 goto Exit; //break;
675 }
676
677 case WM_SYSKEYDOWN:
678 {
679 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
680 if (HIWORD(msg.lParam) & KF_ALTDOWN)
681 {
682 if ( msg.wParam == VK_TAB )
683 {
684 if (Esc) break;
685 if (GetKeyState(VK_SHIFT) < 0)
686 {
687 MoveLeft();
688 }
689 else
690 {
691 MoveRight();
692 }
693 }
694 else if ( msg.wParam == VK_ESCAPE )
695 {
696 if (!Esc) break;
698 }
699 else if ( msg.wParam == VK_LEFT )
700 {
701 MoveLeft();
702 }
703 else if ( msg.wParam == VK_RIGHT )
704 {
705 MoveRight();
706 }
707 else if ( msg.wParam == VK_UP )
708 {
709 MoveUp();
710 }
711 else if ( msg.wParam == VK_DOWN )
712 {
713 MoveDown();
714 }
715 }
716 break;
717 }
718
719 case WM_LBUTTONUP:
720 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
721 ProcessMouseMessage(msg.message, msg.lParam);
722 goto Exit;
723
724 default:
725 if (PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ))
726 {
729 }
730 break;
731 }
732 }
733Exit:
736 if (Esc) DestroyAppWindows();
738 selectedWindow = 0;
739 windowCount = 0;
740 Esc = FALSE;
741 return 0;
742}
743
744//
745// Switch System Class Window Proc.
746//
748{
749 PWND pWnd;
750 PALTTABINFO ati;
751 pWnd = ValidateHwnd(hWnd);
752 if (pWnd)
753 {
754 if (!pWnd->fnid)
755 {
757 }
758 }
759
760 switch (uMsg)
761 {
762 case WM_NCCREATE:
763 if (!(ati = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ati))))
764 return 0;
765 SetWindowLongPtrW( hWnd, 0, (LONG_PTR)ati );
766 return TRUE;
767
768 case WM_SHOWWINDOW:
769 if (wParam)
770 {
773 ati->cbSize = sizeof(ALTTABINFO);
774 ati->cItems = nItems;
775 ati->cColumns = nCols;
776 ati->cRows = nRows;
777 if (nCols)
778 {
779 ati->iColFocus = (selectedWindow - nShift) % nCols;
780 ati->iRowFocus = (selectedWindow - nShift) / nCols;
781 }
782 else
783 {
784 ati->iColFocus = 0;
785 ati->iRowFocus = 0;
786 }
787 ati->cxItem = CX_ITEM_SPACE;
788 ati->cyItem = CY_ITEM_SPACE;
789 ati->ptStart = ptStart;
790 }
791 return 0;
792
793 case WM_MOUSEMOVE:
795 return 0;
796
797 case WM_ACTIVATE:
798 if (wParam == WA_INACTIVE)
799 {
801 }
802 return 0;
803
804 case WM_PAINT:
805 OnPaint(hWnd);
806 return 0;
807
808 case WM_DESTROY:
809 isOpen = FALSE;
811 HeapFree( GetProcessHeap(), 0, ati );
812 SetWindowLongPtrW( hWnd, 0, 0 );
815 return 0;
816 }
817 return DefWindowProcW(hWnd, uMsg, wParam, lParam);
818}
819
821{
823}
824
826{
827 return SwitchWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
828}
#define ICON_TIMEOUT
int yOffset
Definition: appswitch.c:59
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
Definition: appswitch.c:267
WCHAR windowText[1024]
Definition: appswitch.c:49
int fontHeight
Definition: appswitch.c:47
static HWND GetNiceRootOwner(HWND hwnd)
Definition: appswitch.c:191
const DWORD Style
Definition: appswitch.c:71
static void MoveLeft(void)
Definition: appswitch.c:527
int nItems
Definition: appswitch.c:56
static void MoveUp(void)
Definition: appswitch.c:541
int nRows
Definition: appswitch.c:56
void ProcessMouseMessage(UINT message, LPARAM lParam)
Definition: appswitch.c:277
DWORD CreateSwitcherWindow(HINSTANCE hInstance)
Definition: appswitch.c:397
HWND windowList[MAX_WINDOWS]
Definition: appswitch.c:51
static void MoveRight(void)
Definition: appswitch.c:535
int xOffset
Definition: appswitch.c:59
#define ITEM_MARGIN
Definition: appswitch.c:30
POINT ptStart
Definition: appswitch.c:60
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:113
const DWORD ExStyle
Definition: appswitch.c:72
void OnPaint(HWND hWnd)
Definition: appswitch.c:304
int nCols
Definition: appswitch.c:56
#define CX_ITEM
Definition: appswitch.c:28
LRESULT WINAPI DoAppSwitch(WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:584
int CoolSwitchColumns
Definition: appswitch.c:68
BOOL CALLBACK EnumerateCallback(HWND window, LPARAM lParam)
Definition: appswitch.c:144
DWORD GetDialogFont(VOID)
Definition: appswitch.c:418
#define CX_ITEM_SPACE
Definition: appswitch.c:32
void ResizeAndCenter(HWND hwnd, int width, int height)
Definition: appswitch.c:89
BOOL IsAltTabWindow(HWND hwnd)
Definition: appswitch.c:217
#define DIALOG_MARGIN
Definition: appswitch.c:22
#define CY_ITEM_SPACE
Definition: appswitch.c:33
int totalH
Definition: appswitch.c:58
void RotateTasks(BOOL bShift)
Definition: appswitch.c:490
LRESULT WINAPI SwitchWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:820
int itemsH
Definition: appswitch.c:57
BOOL ProcessHotKey(VOID)
Definition: appswitch.c:455
BOOL CoolSwitch
Definition: appswitch.c:66
int windowCount
Definition: appswitch.c:53
int nShift
Definition: appswitch.c:62
HICON iconList[MAX_WINDOWS]
Definition: appswitch.c:52
int cyBorder
Definition: appswitch.c:55
#define MAX_WINDOWS
Definition: appswitch.c:39
VOID DestroyAppWindows(VOID)
Definition: appswitch.c:572
int CoolSwitchRows
Definition: appswitch.c:67
BOOL LoadCoolSwitchSettings(void)
Definition: appswitch.c:74
#define ICON_MARGIN
Definition: appswitch.c:26
int totalW
Definition: appswitch.c:58
BOOL isOpen
Definition: appswitch.c:45
#define CY_ITEM
Definition: appswitch.c:29
#define CX_ICON
Definition: appswitch.c:24
void PrepareWindow(VOID)
Definition: appswitch.c:433
#define CY_TEXT_MARGIN
Definition: appswitch.c:35
LRESULT WINAPI SwitchWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:825
LRESULT WINAPI SwitchWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: appswitch.c:747
HWND switchdialog
Definition: appswitch.c:42
static void MoveDown(void)
Definition: appswitch.c:556
int selectedWindow
Definition: appswitch.c:44
HFONT dialogFont
Definition: appswitch.c:43
BOOL Esc
Definition: appswitch.c:64
#define CY_ICON
Definition: appswitch.c:25
int itemsW
Definition: appswitch.c:57
int cxBorder
Definition: appswitch.c:55
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
ULONG_PTR * PDWORD_PTR
Definition: basetsd.h:184
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
PSERVERINFO gpsi
Definition: imm.c:18
#define ValidateHwnd(hwnd)
Definition: precomp.h:85
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
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 FNID_SWITCH
Definition: ntuser.h:860
#define FNID_DESTROY
Definition: ntuser.h:893
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4340
volatile BOOLEAN bShift
Definition: shell.c:71
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static IHTMLWindow2 * window
Definition: events.c:77
HICON hIcon
Definition: msconfig.c:44
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_EX_DLGMODALFRAME
Definition: pedump.c:645
#define WS_BORDER
Definition: pedump.c:625
#define WS_POPUP
Definition: pedump.c:616
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define WS_DISABLED
Definition: pedump.c:621
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define _countof(array)
Definition: sndvol32.h:68
static void Exit(void)
Definition: sock.c:1330
#define TRACE(s)
Definition: solgame.cpp:4
Definition: ntuser.h:689
DWORD fnid
Definition: ntuser.h:704
Definition: tftpd.h:60
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
Definition: time.h:68
#define ICON_BIG
Definition: tnclass.cpp:51
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
#define WC_SWITCH
Definition: undocuser.h:12
HINSTANCE User32Instance
Definition: dllmain.c:27
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
VOID WINAPI SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
Definition: window.c:82
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
#define MoveMemory
Definition: winbase.h:1667
_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
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
#define DI_NORMAL
Definition: wingdi.h:72
#define TRANSPARENT
Definition: wingdi.h:950
#define NULL_BRUSH
Definition: wingdi.h:901
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define GetTextMetrics
Definition: wingdi.h:4474
#define PS_SOLID
Definition: wingdi.h:586
#define SW_SHOWNORMAL
Definition: winuser.h:764
#define WM_PAINT
Definition: winuser.h:1610
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define GW_OWNER
Definition: winuser.h:761
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD WINAPI GetSysColor(_In_ int)
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
#define SW_HIDE
Definition: winuser.h:762
#define SWP_NOACTIVATE
Definition: winuser.h:1232
#define COLOR_BTNTEXT
Definition: winuser.h:927
#define GetWindowLongPtrW
Definition: winuser.h:4819
#define VK_TAB
Definition: winuser.h:2189
#define SWP_NOREPOSITION
Definition: winuser.h:1240
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define WM_KEYUP
Definition: winuser.h:1706
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define SM_CYSCREEN
Definition: winuser.h:954
#define DT_CENTER
Definition: winuser.h:527
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DT_END_ELLIPSIS
Definition: winuser.h:529
#define DFCS_BUTTONPUSH
Definition: winuser.h:501
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI GetLastActivePopup(_In_ HWND)
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#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)
#define COLOR_HIGHLIGHT
Definition: winuser.h:920
#define SMTO_BLOCK
Definition: winuser.h:1214
#define DT_SINGLELINE
Definition: winuser.h:540
HICON WINAPI CopyIcon(_In_ HICON)
Definition: cursoricon.c:1980
#define SWP_NOMOVE
Definition: winuser.h:1234
#define KF_ALTDOWN
Definition: winuser.h:2439
#define WS_EX_NOACTIVATE
Definition: winuser.h:395
#define DFC_BUTTON
Definition: winuser.h:476
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
#define VK_UP
Definition: winuser.h:2215
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
#define SWP_NOSIZE
Definition: winuser.h:1235
#define WM_MOUSEMOVE
Definition: winuser.h:1765
#define WA_INACTIVE
Definition: winuser.h:2612
#define SWP_ASYNCWINDOWPOS
Definition: winuser.h:1243
BOOL WINAPI CallMsgFilterW(_In_ LPMSG, _In_ INT)
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
#define WM_NCCREATE
Definition: winuser.h:1673
#define WM_ACTIVATE
Definition: winuser.h:1602
#define WM_SHOWWINDOW
Definition: winuser.h:1618
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define VK_RETURN
Definition: winuser.h:2191
#define HWND_TOP
Definition: winuser.h:1197
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define MSGF_NEXTWINDOW
Definition: winuser.h:1169
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:1997
#define PM_REMOVE
Definition: winuser.h:1186
BOOL WINAPI WaitMessage(void)
Definition: ntwrapper.h:350
HDC WINAPI GetDC(_In_opt_ HWND)
#define GetWindowLong
Definition: winuser.h:5786
#define WM_LBUTTONUP
Definition: winuser.h:1767
#define DT_VCENTER
Definition: winuser.h:543
#define CW_USEDEFAULT
Definition: winuser.h:225
#define GetClassLongPtrW
Definition: winuser.h:4554
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1213
#define VK_LEFT
Definition: winuser.h:2214
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
#define VK_RIGHT
Definition: winuser.h:2216
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define VK_DOWN
Definition: winuser.h:2217
#define SWP_NOOWNERZORDER
Definition: winuser.h:1239
#define VK_SHIFT
Definition: winuser.h:2192
#define WM_DESTROY
Definition: winuser.h:1599
struct tagALTTABINFO * PALTTABINFO
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define SM_CXSCREEN
Definition: winuser.h:953
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
Definition: winuser.h:5336
#define GCL_HICON
Definition: winuser.h:661
struct tagALTTABINFO ALTTABINFO
#define VK_ESCAPE
Definition: winuser.h:2204
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI DestroyWindow(_In_ HWND)
#define DFCS_PUSHED
Definition: winuser.h:503
#define PM_NOREMOVE
Definition: winuser.h:1185
int WINAPI GetSystemMetrics(_In_ int)
#define WM_SYSKEYDOWN
Definition: winuser.h:1709
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
SHORT WINAPI GetKeyState(_In_ int)
#define VK_MENU
Definition: winuser.h:2194
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define GWL_EXSTYLE
Definition: winuser.h:845
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define COLOR_3DFACE
Definition: winuser.h:923
__wchar_t WCHAR
Definition: xmlstorage.h:180