ReactOS 0.4.15-dev-8344-g0574987
magnifier.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Magnify
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Magnification of parts of the screen.
5 * COPYRIGHT: Copyright 2007-2019 Marc Piulachs <marc.piulachs@codexchange.net>
6 * Copyright 2015-2019 David Quintana <gigaherz@gmail.com>
7 */
8
9/* TODO: Support AppBar types other than ABE_TOP */
10
11#include "magnifier.h"
12
13#include <winbase.h>
14#include <winuser.h>
15#include <wingdi.h>
16#include <winnls.h>
17#include <commctrl.h>
18#include <shellapi.h>
19#include <windowsx.h>
20#include <stdlib.h>
21#include <tchar.h>
22
23#include "resource.h"
24
25#define APPMSG_NOTIFYICON (WM_APP+1)
26#define APPMSG_APPBAR (WM_APP+2)
27
28const TCHAR szWindowClass[] = TEXT("MAGNIFIER");
29
30/* Global Variables */
33
34#define MAX_LOADSTRING 100
36
37#define TIMER_SPEED 1
38#define REPAINT_SPEED 100
39
41
43
57
58/* Current magnified area */
60
61/* Last positions */
67
74
75int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
76{
77 MSG msg;
78 HACCEL hAccelTable;
80
81 UNREFERENCED_PARAMETER(hPrevInstance);
82 UNREFERENCED_PARAMETER(lpCmdLine);
83
85 {
88 break;
89
90 default:
91 break;
92 }
93
94 /* Initialize global strings */
97
98 /* Perform application initialization */
99 if (!InitInstance(hInstance, nCmdShow))
100 return FALSE;
101
103
104 /* Main message loop */
105 while (GetMessage(&msg, NULL, 0, 0))
106 {
107 if (!TranslateAccelerator(hMainWnd, hAccelTable, &msg))
108 {
111 }
112 }
113
114 /* Load the common controls */
115 iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
117 InitCommonControlsEx(&iccex);
118
122
123 return (int) msg.wParam;
124}
125
127{
128 WNDCLASS wc;
129
131 wc.lpfnWndProc = WndProc;
132 wc.cbClsExtra = 0;
133 wc.cbWndExtra = 0;
134 wc.hInstance = hInstance;
137 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
138 wc.lpszMenuName = NULL; //MAKEINTRESOURCE(IDC_MAGNIFIER);
140
141 return RegisterClass(&wc);
142}
143
145{
146 UINT uState;
147 APPBARDATA data = {0};
148 data.cbSize = sizeof(data);
149 data.hWnd = hMainWnd;
150 data.uCallbackMessage = APPMSG_APPBAR;
151
152 if (mode == ABM_NEW || mode == ABM_SETPOS)
153 {
154 HWND hWndOrder = HWND_BOTTOM;
155 int rcw, rch;
156 RECT rcWorkArea;
157 SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
158
159 if (mode == ABM_NEW)
160 {
162
163 switch(AppBarConfig.uEdge)
164 {
165 case ABE_LEFT:
166 data.rc.top = rcWorkArea.top;
167 data.rc.bottom = rcWorkArea.bottom;
168 data.rc.left = rcWorkArea.left;
169 data.rc.right = data.rc.left + AppBarConfig.appBarSizes.left;
170 break;
171 case ABE_TOP:
172 data.rc.left = rcWorkArea.left;
173 data.rc.right = rcWorkArea.right;
174 data.rc.top = rcWorkArea.top;
175 data.rc.bottom = data.rc.top + AppBarConfig.appBarSizes.top;
176 break;
177 case ABE_RIGHT:
178 data.rc.top = rcWorkArea.top;
179 data.rc.bottom = rcWorkArea.bottom;
180 data.rc.right = rcWorkArea.left;
181 data.rc.left = data.rc.right - AppBarConfig.appBarSizes.right;
182 break;
183 case ABE_BOTTOM:
184 data.rc.left = rcWorkArea.left;
185 data.rc.right = rcWorkArea.right;
186 data.rc.bottom = rcWorkArea.bottom;
187 data.rc.top = data.rc.bottom - AppBarConfig.appBarSizes.bottom;
188 break;
189 }
190 }
191 else
192 {
194 }
195
196 data.uEdge = AppBarConfig.uEdge;
198 uState = SHAppBarMessage(ABM_SETPOS, &data);
199
200 rcw = data.rc.right-data.rc.left;
201 rch = data.rc.bottom-data.rc.top;
202
204 if (uState & ABS_ALWAYSONTOP)
205 hWndOrder = HWND_TOPMOST;
206
207 SetWindowPos(hMainWnd, hWndOrder, data.rc.left, data.rc.top, rcw, rch, SWP_SHOWWINDOW | SWP_NOCOPYBITS);
208
209 }
210 else if (mode == ABM_GETSTATE)
211 {
212 HWND hWndOrder = HWND_BOTTOM;
214 if (uState & ABS_ALWAYSONTOP)
215 hWndOrder = HWND_TOPMOST;
216 SetWindowPos(hMainWnd, hWndOrder, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
217 }
218 else if (mode == ABM_ACTIVATE)
219 {
221 }
222 else if (mode == ABM_WINDOWPOSCHANGED)
223 {
225 }
226 else if (mode == ABM_REMOVE)
227 {
229 }
230}
231
232void AttachAppBar(INT uEdge)
233{
234 if (AppBarConfig.uEdge == uEdge)
235 return;
236
237 if (AppBarConfig.uEdge < 0 && uEdge >= 0)
238 {
240 }
241 else if (uEdge < 0 && AppBarConfig.uEdge >= 0)
242 {
245 }
246
247 if (AppBarConfig.uEdge >= 0)
248 {
250 }
251
252 if (uEdge >= 0)
253 {
254 AppBarConfig.uEdge = uEdge;
256 }
257 else
258 {
259 RECT rc = AppBarConfig.rcFloating;
260 SetWindowPos(hMainWnd, HWND_TOPMOST, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0);
261 }
262
263 AppBarConfig.uEdge = uEdge;
264}
265
267{
268 RECT rc;
271
272 /* Load settings from registry */
273 LoadSettings();
274
275 rc = AppBarConfig.rcFloating;
276
277 hInst = hInstance; // Store instance handle in our global variable
278
279 if (AppBarConfig.uEdge <0 )
280 {
281 dwStyles |= WS_CAPTION;
282 exStyles |= WS_EX_TOPMOST;
283 }
284
285 /* Create the Window */
286 hMainWnd = CreateWindowEx(exStyles,
288 szTitle,
289 dwStyles,
290 rc.left,
291 rc.top,
292 rc.right-rc.left,
293 rc.bottom-rc.top,
294 NULL,
295 NULL,
296 hInstance,
297 NULL);
298 if (!hMainWnd)
299 return FALSE;
300
301 if (AppBarConfig.uEdge >= 0)
303 else
305
306 // In Windows 2003's Magnifier, the "Start Minimized" setting
307 // refers exclusively to the options dialog, not the main window itself.
310
311 if (bShowWarning)
313
314 return TRUE;
315}
316
317void Refresh(void)
318{
319 if (!IsIconic(hMainWnd))
320 {
321 /* Invalidate the client area forcing a WM_PAINT message */
323 }
324}
325
327{
328 int rcLeft, rcTop;
329 int rcWidth, rcHeight;
330 RECT rcMon;
331 HMONITOR hMon = MonitorFromRect(rect, MONITOR_DEFAULTTONEAREST);
333 info.cbSize = sizeof(info);
334
335 GetMonitorInfo(hMon, &info);
336
337 rcMon = info.rcMonitor;
338
339 rcLeft = rect->left;
340 rcTop = rect->top;
341 rcWidth = (rect->right - rect->left);
342 rcHeight = (rect->bottom - rect->top);
343
344 if (rcLeft < rcMon.left)
345 rcLeft = rcMon.left;
346
347 if (rcTop < rcMon.top)
348 rcTop = rcMon.top;
349
350 if (rcLeft > (rcMon.right - rcWidth))
351 rcLeft = (rcMon.right - rcWidth);
352
353 if (rcTop > (rcMon.bottom - rcHeight))
354 rcTop = (rcMon.bottom - rcHeight);
355
356 OffsetRect(rect, (rcLeft-rect->left), (rcTop-rect->top));
357}
358
359void Draw(HDC aDc)
360{
361 HDC desktopHdc = NULL;
362
363 RECT sourceRect, intersectedRect;
364 RECT targetRect, appRect;
365 DWORD rop = SRCCOPY;
366 CURSORINFO cinfo;
367 ICONINFO iinfo;
368
369 int AppWidth, AppHeight;
370
371 if (bInvertColors)
372 rop = NOTSRCCOPY;
373
374 desktopHdc = GetDC(0);
375
376 GetClientRect(hMainWnd, &appRect);
377 AppWidth = (appRect.right - appRect.left);
378 AppHeight = (appRect.bottom - appRect.top);
379
380 ZeroMemory(&cinfo, sizeof(cinfo));
381 ZeroMemory(&iinfo, sizeof(iinfo));
382 cinfo.cbSize = sizeof(cinfo);
383 GetCursorInfo(&cinfo);
384 GetIconInfo(cinfo.hCursor, &iinfo);
385
386 targetRect = appRect;
387 ClientToScreen(hMainWnd, (POINT*)&targetRect.left);
388 ClientToScreen(hMainWnd, (POINT*)&targetRect.right);
389
391 {
393
394 if (hdcOffscreen)
395 {
399 }
400
401 sourceWidth = AppWidth / uiZoom;
402 sourceHeight = AppHeight / uiZoom;
403
404 /* Create a memory DC compatible with client area DC */
405 hdcOffscreen = CreateCompatibleDC(desktopHdc);
406
407 /* Create a bitmap compatible with the client area DC */
411
412 /* Select our bitmap in memory DC and save the old one */
414 }
415
416 GetWindowRect(hDesktopWindow, &sourceRect);
417 sourceRect.left = (cp.x) - (sourceWidth /2);
418 sourceRect.top = (cp.y) - (sourceHeight /2);
419 sourceRect.right = sourceRect.left + sourceWidth;
420 sourceRect.bottom = sourceRect.top + sourceHeight;
421
422 GetBestOverlapWithMonitors(&sourceRect);
423
424 /* Paint the screen bitmap to our in memory DC */
426 0,
427 0,
430 desktopHdc,
431 sourceRect.left,
432 sourceRect.top,
433 rop);
434
435 if (IntersectRect(&intersectedRect, &sourceRect, &targetRect))
436 {
437 OffsetRect(&intersectedRect, -sourceRect.left, -sourceRect.top);
438 FillRect(hdcOffscreen, &intersectedRect, GetStockObject(DC_BRUSH));
439 }
440
441 /* Draw the mouse pointer in the right position */
443 pMouse.x - iinfo.xHotspot - sourceRect.left, // - 10,
444 pMouse.y - iinfo.yHotspot - sourceRect.top, // - 10,
445 cinfo.hCursor);
446
447 /* Blast the stretched image from memory DC to window DC */
448 StretchBlt(aDc,
449 0,
450 0,
451 AppWidth,
452 AppHeight,
454 0,
455 0,
459
460 /* Cleanup */
461 if (iinfo.hbmMask)
462 DeleteObject(iinfo.hbmMask);
463 if (iinfo.hbmColor)
464 DeleteObject(iinfo.hbmColor);
465 ReleaseDC(hDesktopWindow, desktopHdc);
466}
467
469{
470 POINT pt;
471
472 switch(lParam)
473 {
474 case WM_LBUTTONUP:
476 break;
477 case WM_RBUTTONUP:
479 TrackPopupMenu(notifyMenu, 0, pt.x, pt.y, 0, hWnd, NULL);
480 break;
481 }
482}
483
485{
486 int wmId;
487
488 switch (message)
489 {
490 case WM_TIMER:
491 {
492 BOOL hasMoved = FALSE;
493
494 GUITHREADINFO guiInfo;
495 guiInfo.cbSize = sizeof(guiInfo);
496
497 GetGUIThreadInfo(0, &guiInfo);
498
499 if (bFollowMouse)
500 {
501 POINT pNewMouse;
502
503 //Get current mouse position
504 GetCursorPos (&pNewMouse);
505
506#define PointsAreEqual(pt1, pt2) (((pt1).x == (pt2).x) && ((pt1).y == (pt2).y))
507
508 //If mouse has moved ...
509 if (!PointsAreEqual(pMouse, pNewMouse))
510 {
511 //Update to new position
512 pMouse = pNewMouse;
513 cp = pNewMouse;
514 hasMoved = TRUE;
515 }
516 }
517
518 if (guiInfo.hwndActive != hMainWnd)
519 {
520 if (bFollowCaret)
521 {
522 if (guiInfo.hwndCaret)
523 {
524 POINT ptCaret;
525 ptCaret.x = (guiInfo.rcCaret.left + guiInfo.rcCaret.right) / 2;
526 ptCaret.y = (guiInfo.rcCaret.top + guiInfo.rcCaret.bottom) / 2;
527
528 if ((pCaretWnd != guiInfo.hwndCaret) || !PointsAreEqual(pCaret, ptCaret))
529 {
530 //Update to new position
531 pCaret = ptCaret;
532 pCaretWnd = guiInfo.hwndCaret;
533 if (!hasMoved)
534 {
535 ClientToScreen (guiInfo.hwndCaret, (LPPOINT) &ptCaret);
536 cp = ptCaret;
537 hasMoved = TRUE;
538 }
539 }
540 }
541 else
542 {
543 pCaretWnd = NULL;
544 }
545 }
546
547 if (bFollowFocus)
548 {
549 if (guiInfo.hwndFocus && !guiInfo.hwndCaret)
550 {
551 POINT ptFocus;
552 RECT activeRect;
553
554 //Get current control focus
555 GetWindowRect(guiInfo.hwndFocus, &activeRect);
556 ptFocus.x = (activeRect.left + activeRect.right) / 2;
557 ptFocus.y = (activeRect.top + activeRect.bottom) / 2;
558
559 if ((guiInfo.hwndFocus != pFocusWnd) || !PointsAreEqual(pFocus, ptFocus))
560 {
561 //Update to new position
562 pFocus = ptFocus;
563 pFocusWnd = guiInfo.hwndFocus;
564 if (!hasMoved)
565 {
566 cp = ptFocus;
567 hasMoved = TRUE;
568 }
569 }
570 }
571 else
572 {
573 pFocusWnd = NULL;
574 }
575 }
576 }
577
578 if (!hasMoved)
579 {
580 DWORD newTicks = GetTickCount();
581 DWORD elapsed = (newTicks - lastTicks);
582 if (elapsed > REPAINT_SPEED)
583 {
584 hasMoved = TRUE;
585 }
586 }
587
588 if (hasMoved)
589 {
591 Refresh();
592 }
593
594 return 0;
595 }
596
597 case WM_COMMAND:
598 {
599 wmId = LOWORD(wParam);
600 /* Parse the menu selections */
601 switch (wmId)
602 {
603 case IDM_OPTIONS:
605 break;
606 case IDM_ABOUT:
608 break;
609 case IDM_EXIT:
611 break;
612 default:
614 }
615 return 0;
616 }
617
618 case WM_PAINT:
619 {
620 PAINTSTRUCT PaintStruct;
621 HDC dc;
622 dc = BeginPaint(hWnd, &PaintStruct);
623 Draw(dc);
624 EndPaint(hWnd, &PaintStruct);
625 return 0;
626 }
627
628 case WM_CONTEXTMENU:
630 return 0;
631
632 case WM_LBUTTONDOWN:
633 {
634 RECT rc;
635 POINT pt;
637
639 GetWindowRect(hWnd, &rc);
640 ptDragOffset.x = pt.x - rc.left;
641 ptDragOffset.y = pt.y - rc.top;
642
643 nearEdge = AppBarConfig.uEdge;
644
645 break;
646 }
647
648 case WM_MOUSEMOVE:
649 if (GetCapture() == hWnd)
650 {
651 RECT rc;
652 POINT pt;
653 RECT rcWorkArea;
654 SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
656 GetWindowRect(hWnd, &rc);
657
658 if (AppBarConfig.uEdge >= 0)
659 {
660 if (pt.x >= rcWorkArea.left && pt.x <= rcWorkArea.right &&
661 pt.y >= rcWorkArea.top && pt.y <= rcWorkArea.bottom)
662 {
663 AttachAppBar(-2);
664
665 // Fixup offset
666 GetWindowRect(hWnd, &rc);
667 ptDragOffset.x = (rc.right-rc.left)/2;
668 ptDragOffset.y = 2;
669
670 rc.left = pt.x - ptDragOffset.x;
671 rc.top = pt.y - ptDragOffset.y;
672
674 }
675 }
676 else
677 {
678 if (pt.x <= rcWorkArea.left+8 && nearEdge != ABE_LEFT)
679 {
682 }
683 else if (pt.y <= rcWorkArea.top+8 && nearEdge != ABE_TOP)
684 {
687 }
688 else if (pt.x >= rcWorkArea.right-8 && nearEdge != ABE_RIGHT)
689 {
692 }
693 else if (pt.y >= rcWorkArea.bottom-8 && nearEdge != ABE_BOTTOM)
694 {
697 }
698 else
699 {
700 rc.left = pt.x - ptDragOffset.x;
701 rc.top = pt.y - ptDragOffset.y;
702
704 nearEdge = -1;
705 }
706 }
707
708 pMouse = pt;
709 Refresh();
710 }
711 break;
712
713 case WM_LBUTTONUP:
714 if (GetCapture() == hWnd)
715 {
716 if (AppBarConfig.uEdge >= 0)
718 else
721 }
722 break;
723
724 case WM_SIZE:
725 if (AppBarConfig.uEdge >= 0)
727 /* fallthrough */
728 case WM_DISPLAYCHANGE:
730 Refresh();
731 break;
732
733 case WM_ERASEBKGND:
734 // handle WM_ERASEBKGND by simply returning non-zero because we did all the drawing in WM_PAINT.
735 return 0;
736
737 case WM_DESTROY:
738 {
739 if (AppBarConfig.uEdge >= 0)
741
742 KillTimer(hWnd, 1);
743
744 /* Save settings to registry */
745 SaveSettings();
746
747 /* Cleanup notification icon */
748 ZeroMemory(&nid, sizeof(nid));
749 nid.cbSize = sizeof(nid);
751 nid.hWnd = hWnd;
755
757
759 return 0;
760 }
761
762 case WM_CREATE:
763 {
764 HMENU tempMenu;
765
766 /* Get the desktop window */
768
769 /* Set the timer */
771
772 /* Notification icon */
774
775 ZeroMemory(&nid, sizeof(nid));
776 nid.cbSize = sizeof(nid);
778 nid.hWnd = hWnd;
782
784 notifyMenu = GetSubMenu(tempMenu, 0);
785 RemoveMenu(tempMenu, 0, MF_BYPOSITION);
786 DestroyMenu(tempMenu);
787 return 0;
788 }
789
790 case APPMSG_APPBAR:
791 {
792 switch (wParam)
793 {
794 case ABN_STATECHANGE:
796 break;
797 case ABN_POSCHANGED:
799 break;
801 {
802 if (!lParam)
803 {
805 break;
806 }
807
809 break;
810 }
813 break;
814 }
815 return 0;
816 }
817
820 return 0;
821
822 case WM_ACTIVATE:
823 if (AppBarConfig.uEdge >= 0)
825 break;
826
828 if (AppBarConfig.uEdge >= 0)
830 Refresh();
831 break;
832
833 default:
834 break;
835 }
836
838}
839
841{
843 switch (message)
844 {
845 case WM_INITDIALOG:
846 return (INT_PTR)TRUE;
847
848 case WM_COMMAND:
849 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
850 {
851 EndDialog(hDlg, LOWORD(wParam));
852 return (INT_PTR)TRUE;
853 }
854 break;
855 }
856
857 return (INT_PTR)FALSE;
858}
859
861{
863
864 switch (message)
865 {
866 case WM_INITDIALOG:
867 {
868 /* Add the zoom items */
878
879 if (uiZoom >= 1 && uiZoom <= 9)
881
882 if (bFollowMouse)
884
885 if (bFollowFocus)
887
888 if (bFollowCaret)
890
891 if (bInvertColors)
893
894 if (bStartMinimized)
896
897 if (bShowMagnifier)
899
900 return (INT_PTR)TRUE;
901 }
902
903 case WM_SHOWWINDOW:
905 break;
906
907 case WM_COMMAND:
908 switch (LOWORD(wParam))
909 {
910 case IDOK:
911 case IDCANCEL:
912 ShowWindow(hDlg, SW_HIDE);
913 return (INT_PTR)TRUE;
914
915 case IDC_BUTTON_HELP:
916 /* Unimplemented */
917 MessageBox(hDlg, TEXT("Magnifier help not available yet!"), TEXT("Help"), MB_OK);
918 break;
919
920 case IDC_ZOOM:
922 {
923 HWND hCombo = GetDlgItem(hDlg,IDC_ZOOM);
924 TCHAR currentZoomValue[2] = TEXT("");
925
926 /* Get index of current selection and the text of that selection */
927 int currentSelectionIndex = ComboBox_GetCurSel(hCombo);
928 ComboBox_GetLBText(hCombo, currentSelectionIndex, currentZoomValue);
929 uiZoom = (UINT)_ttoi(currentZoomValue);
930 /* The zoom factor cannot be smaller than 1 (and not zero) or greater than 9 */
931 if (uiZoom < 1 || uiZoom > 9)
932 uiZoom = 1;
933
934 /* Trigger the Draw function to rezoom (which will be set false automatically after rezooming) */
936
937 /* Update the magnifier UI */
938 Refresh();
939 }
940 break;
941
944 Refresh();
945 break;
948 break;
951 break;
954 break;
957 break;
961 break;
962 }
963 }
964
965 return (INT_PTR)FALSE;
966}
967
969{
971
972 switch (message)
973 {
974 case WM_INITDIALOG:
975 return (INT_PTR)TRUE;
976
977 case WM_COMMAND:
978 switch (LOWORD(wParam))
979 {
982 break;
983 }
984 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
985 {
986 EndDialog(hDlg, LOWORD(wParam));
987 return (INT_PTR)TRUE;
988 }
989 break;
990 }
991
992 return (INT_PTR)FALSE;
993}
#define msg(x)
Definition: auth_time.c:54
void SaveSettings(void)
Definition: settings.c:115
void LoadSettings(void)
Definition: settings.c:53
#define IDD_ABOUTBOX
Definition: resource.h:8
#define IDI_ICON
Definition: resource.h:5
HWND hWnd
Definition: settings.c:17
#define IDS_APP_TITLE
Definition: resource.h:10
#define IDC_BUTTON_HELP
Definition: resource.h:17
#define IDM_ABOUT
Definition: resource.h:29
#define IDM_EXIT
Definition: resource.h:27
#define IDC_INVERTCOLORSCHECK
Definition: resource.h:19
#define IDC_SHOWMAGNIFIERCHECK
Definition: resource.h:22
#define IDC_FOLLOWKEYBOARDCHECK
Definition: resource.h:17
#define IDC_SHOWMAGNIFIER
Definition: resource.h:21
#define IDC_FOLLOWTEXTEDITINGCHECK
Definition: resource.h:18
#define IDM_OPTIONS
Definition: resource.h:28
#define IDD_WARNINGDIALOG
Definition: resource.h:15
#define IDD_DIALOGOPTIONS
Definition: resource.h:14
#define IDC_MAGNIFIER
Definition: resource.h:12
#define IDC_FOLLOWMOUSECHECK
Definition: resource.h:23
#define IDC_SHOWWARNINGCHECK
Definition: resource.h:25
#define IDC_ZOOM
Definition: resource.h:16
#define IDC_STARTMINIMIZEDCHECK
Definition: resource.h:20
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
WORD ATOM
Definition: dimm.idl:113
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CALLBACK
Definition: compat.h:35
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: locale.c:1374
UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data)
Definition: appbar.c:65
#define pt(x, y)
Definition: drawing.c:79
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum mode
Definition: glext.h:6217
#define TEXT(s)
Definition: k32.h:26
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
INT_PTR CALLBACK AboutProc(HWND, UINT, WPARAM, LPARAM)
Definition: magnifier.c:840
void DoAppBarStuff(DWORD mode)
Definition: magnifier.c:144
HANDLE hbmpOld
Definition: magnifier.c:54
INT_PTR CALLBACK OptionsProc(HWND, UINT, WPARAM, LPARAM)
Definition: magnifier.c:860
POINT pCaret
Definition: magnifier.c:63
#define MAX_LOADSTRING
Definition: magnifier.c:34
void Draw(HDC aDc)
Definition: magnifier.c:359
BOOL bOptionsDialog
Definition: magnifier.c:48
POINT pFocus
Definition: magnifier.c:64
HWND pFocusWnd
Definition: magnifier.c:66
HDC hdcOffscreen
Definition: magnifier.c:52
HINSTANCE hInst
Definition: magnifier.c:31
POINT cp
Definition: magnifier.c:59
POINT pMouse
Definition: magnifier.c:62
void Refresh(void)
Definition: magnifier.c:317
POINT ptDragOffset
Definition: magnifier.c:55
HWND hMainWnd
Definition: magnifier.c:32
void AttachAppBar(INT uEdge)
Definition: magnifier.c:232
HWND hOptionsDialog
Definition: magnifier.c:47
BOOL InitInstance(HINSTANCE, int)
Definition: magnifier.c:266
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
Definition: magnifier.c:75
LONG sourceWidth
Definition: magnifier.c:50
#define APPMSG_APPBAR
Definition: magnifier.c:26
LONG sourceHeight
Definition: magnifier.c:51
HMENU notifyMenu
Definition: magnifier.c:46
#define TIMER_SPEED
Definition: magnifier.c:37
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
Definition: magnifier.c:484
HWND pCaretWnd
Definition: magnifier.c:65
INT nearEdge
Definition: magnifier.c:56
#define APPMSG_NOTIFYICON
Definition: magnifier.c:25
HWND hDesktopWindow
Definition: magnifier.c:42
ATOM MyRegisterClass(HINSTANCE hInstance)
Definition: magnifier.c:126
HICON notifyIcon
Definition: magnifier.c:45
INT_PTR CALLBACK WarningProc(HWND, UINT, WPARAM, LPARAM)
Definition: magnifier.c:968
#define PointsAreEqual(pt1, pt2)
void GetBestOverlapWithMonitors(LPRECT rect)
Definition: magnifier.c:326
const TCHAR szWindowClass[]
Definition: magnifier.c:28
DWORD lastTicks
Definition: magnifier.c:40
NOTIFYICONDATA nid
Definition: magnifier.c:44
HBITMAP hbmpOffscreen
Definition: magnifier.c:53
BOOL bRecreateOffscreenDC
Definition: magnifier.c:49
void HandleNotifyIconMessage(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: magnifier.c:468
#define REPAINT_SPEED
Definition: magnifier.c:38
BOOL bFollowFocus
Definition: settings.c:19
struct _AppBarConfig_t AppBarConfig
Definition: settings.c:26
UINT uiZoom
Definition: settings.c:14
BOOL bInvertColors
Definition: settings.c:22
BOOL bShowMagnifier
Definition: settings.c:24
BOOL bFollowCaret
Definition: settings.c:20
BOOL bShowWarning
Definition: settings.c:16
BOOL bFollowMouse
Definition: settings.c:18
BOOL bStartMinimized
Definition: settings.c:23
static const WCHAR dc[]
#define rch(ap)
Definition: match.c:407
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HMONITOR WINAPI MonitorFromRect(LPCRECT, DWORD)
static int rop(int rop, int src, int dst)
Definition: nanoxwin.c:124
unsigned int UINT
Definition: ndis.h:50
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CAPTION
Definition: pedump.c:624
#define WS_SIZEBOX
Definition: pedump.c:642
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_POPUP
Definition: pedump.c:616
#define WS_EX_TOPMOST
Definition: pedump.c:647
long LONG
Definition: pedump.c:60
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
#define ICC_STANDARD_CLASSES
Definition: commctrl.h:73
#define ICC_WIN95_CLASSES
Definition: commctrl.h:66
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define DefWindowProc
Definition: ros2win.h:31
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_HEBREW
Definition: nls.h:67
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define ABM_WINDOWPOSCHANGED
Definition: shellapi.h:71
#define ABE_BOTTOM
Definition: shellapi.h:20
#define ABM_GETSTATE
Definition: shellapi.h:66
#define ABE_RIGHT
Definition: shellapi.h:19
#define ABE_TOP
Definition: shellapi.h:18
#define ABN_FULLSCREENAPP
Definition: shellapi.h:74
#define NIM_DELETE
Definition: shellapi.h:96
#define ABM_SETPOS
Definition: shellapi.h:65
#define ABM_ACTIVATE
Definition: shellapi.h:68
#define ABE_LEFT
Definition: shellapi.h:17
#define ABS_ALWAYSONTOP
Definition: shellapi.h:22
#define ABM_REMOVE
Definition: shellapi.h:63
#define NIF_ICON
Definition: shellapi.h:106
#define NIF_MESSAGE
Definition: shellapi.h:105
#define ABN_STATECHANGE
Definition: shellapi.h:72
#define ABM_NEW
Definition: shellapi.h:62
#define NIM_ADD
Definition: shellapi.h:94
#define ABN_POSCHANGED
Definition: shellapi.h:73
#define Shell_NotifyIcon
Definition: shellapi.h:691
#define ABM_QUERYPOS
Definition: shellapi.h:64
#define ABN_WINDOWARRANGE
Definition: shellapi.h:75
& rect
Definition: startmenu.cpp:1413
DWORD cbSize
Definition: shellapi.h:217
DWORD yHotspot
Definition: winuser.h:3125
DWORD xHotspot
Definition: winuser.h:3124
HBITMAP hbmColor
Definition: winuser.h:3127
HBITMAP hbmMask
Definition: winuser.h:3126
UINT uCallbackMessage
Definition: shellapi.h:231
HBRUSH hbrBackground
Definition: winuser.h:3170
HICON hIcon
Definition: winuser.h:3168
HINSTANCE hInstance
Definition: winuser.h:3167
HCURSOR hCursor
Definition: winuser.h:3169
int cbWndExtra
Definition: winuser.h:3166
UINT style
Definition: winuser.h:3163
LPCSTR lpszMenuName
Definition: winuser.h:3171
LPCSTR lpszClassName
Definition: winuser.h:3172
WNDPROC lpfnWndProc
Definition: winuser.h:3164
int cbClsExtra
Definition: winuser.h:3165
Definition: tftpd.h:60
DWORD cbSize
Definition: winuser.h:3719
HCURSOR hCursor
Definition: winuser.h:3721
HWND hwndCaret
Definition: winable.h:77
HWND hwndFocus
Definition: winable.h:73
DWORD cbSize
Definition: winable.h:70
HWND hwndActive
Definition: winable.h:72
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
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT_PTR
Definition: typedefs.h:64
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
BOOL WINAPI SetProcessDefaultLayout(DWORD dwDefaultLayout)
Definition: window.c:1691
BOOL WINAPI GetGUIThreadInfo(DWORD, LPGUITHREADINFO)
Definition: ntwrapper.h:398
#define ZeroMemory
Definition: winbase.h:1712
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 GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define ComboBox_GetLBText(hwndCtl, index, lpszBuffer)
Definition: windowsx.h:56
#define ComboBox_GetCurSel(hwndCtl)
Definition: windowsx.h:49
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define NOMIRRORBITMAP
Definition: wingdi.h:1377
HGDIOBJ WINAPI GetStockObject(_In_ int)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333
#define LAYOUT_RTL
Definition: wingdi.h:1371
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define NOTSRCCOPY
Definition: wingdi.h:325
BOOL WINAPI DeleteDC(_In_ HDC)
#define WM_PAINT
Definition: winuser.h:1620
BOOL WINAPI GetCursorInfo(_Inout_ PCURSORINFO)
HWND WINAPI SetCapture(_In_ HWND hWnd)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1625
#define CS_VREDRAW
Definition: winuser.h:658
#define CreateWindowEx
Definition: winuser.h:5764
#define GetMonitorInfo
Definition: winuser.h:5800
#define SW_HIDE
Definition: winuser.h:768
#define SWP_FRAMECHANGED
Definition: winuser.h:1240
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define COLOR_WINDOW
Definition: winuser.h:918
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define HWND_TOPMOST
Definition: winuser.h:1208
#define IDCANCEL
Definition: winuser.h:831
#define IMAGE_ICON
Definition: winuser.h:212
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
Definition: cursoricon.c:2089
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1608
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WS_EX_CONTROLPARENT
Definition: winuser.h:387
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1611
BOOL WINAPI DrawIcon(_In_ HDC, _In_ int, _In_ int, _In_ HICON)
Definition: cursoricon.c:2062
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#define CS_HREDRAW
Definition: winuser.h:653
#define IDC_ARROW
Definition: winuser.h:687
#define CreateDialog
Definition: winuser.h:5758
#define CB_SETCURSEL
Definition: winuser.h:1961
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2714
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define WM_RBUTTONUP
Definition: winuser.h:1780
#define SWP_NOSIZE
Definition: winuser.h:1245
#define WM_MOUSEMOVE
Definition: winuser.h:1775
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define WM_INITDIALOG
Definition: winuser.h:1739
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI IsIconic(_In_ HWND)
#define IDOK
Definition: winuser.h:830
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define CBN_SELCHANGE
Definition: winuser.h:1979
#define BM_SETCHECK
Definition: winuser.h:1921
#define WM_ACTIVATE
Definition: winuser.h:1612
#define WM_SHOWWINDOW
Definition: winuser.h:1628
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define GetMessage
Definition: winuser.h:5799
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define HWND_TOP
Definition: winuser.h:1207
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define SWP_NOCOPYBITS
Definition: winuser.h:1243
#define WM_TIMER
Definition: winuser.h:1742
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define CB_ADDSTRING
Definition: winuser.h:1936
#define LoadIcon
Definition: winuser.h:5822
#define SWP_SHOWWINDOW
Definition: winuser.h:1248
#define LoadCursor
Definition: winuser.h:5821
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define LoadMenu
Definition: winuser.h:5826
#define MB_OK
Definition: winuser.h:790
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define PostMessage
Definition: winuser.h:5841
#define LoadImage
Definition: winuser.h:5824
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define LoadString
Definition: winuser.h:5828
#define MessageBox
Definition: winuser.h:5831
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define SW_SHOW
Definition: winuser.h:775
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define RegisterClass
Definition: winuser.h:5845
#define WM_DESTROY
Definition: winuser.h:1609
#define DispatchMessage
Definition: winuser.h:5774
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SystemParametersInfo
Definition: winuser.h:5867
#define GWL_STYLE
Definition: winuser.h:852
#define SendDlgItemMessage
Definition: winuser.h:5851
#define TranslateAccelerator
Definition: winuser.h:5869
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1662
BOOL WINAPI DestroyWindow(_In_ HWND)
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define HWND_BOTTOM
Definition: winuser.h:1205
#define LoadAccelerators
Definition: winuser.h:5819
#define DialogBox
Definition: winuser.h:5770
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2097
char TCHAR
Definition: xmlstorage.h:189
#define _ttoi
Definition: xmlstorage.h:195
char * LPSTR
Definition: xmlstorage.h:182