<xi:include href="lib/directory.rbuild" />
</directory>
-->
+
+<directory name="magnify">
+ <xi:include href="magnify/magnify.rbuild" />
+</directory>
+
<directory name="mc">
<xi:include href="mc/mc.rbuild" />
</directory>
--- /dev/null
+// Microsoft Visual C++ generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#define APSTUDIO_HIDDEN_SYMBOLS\r
+#include "windows.h"\r
+#undef APSTUDIO_HIDDEN_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Neutral resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_ICON ICON "res/magnify.ico"\r
+#endif // Neutral resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_MAGNIFIER ICON "res/Magnify.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDC_MAGNIFIER MENU \r
+BEGIN\r
+ POPUP "&File"\r
+ BEGIN\r
+ MENUITEM "E&xit", IDM_EXIT\r
+ MENUITEM "&Options", IDM_OPTIONS\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&About ...", IDM_ABOUT\r
+ END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDC_MAGNIFIER ACCELERATORS \r
+BEGIN\r
+ "?", IDM_ABOUT, ASCII, ALT\r
+ "/", IDM_ABOUT, ASCII, ALT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_ABOUTBOX DIALOGEX 22, 17, 220, 75\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU\r
+CAPTION "About"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+ ICON IDI_MAGNIFIER,IDC_MYICON,14,9,20,20\r
+ LTEXT "Magnifier Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX\r
+ LTEXT "Copyright (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,48,24,125,22\r
+ PUSHBUTTON "Ok",IDOK,162,48,50,14\r
+END\r
+\r
+IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Magnifier Settings"\r
+FONT 8, "MS Shell Dlg", 400, 0, 0x1\r
+BEGIN\r
+ DEFPUSHBUTTON "Exit",IDOK,96,161,50,14\r
+ PUSHBUTTON "Help",IDOK,38,161,50,14\r
+ LTEXT "Magnification level :",IDC_STATIC,6,12,68,8\r
+ COMBOBOX IDC_ZOOM,72,6,63,66,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+ GROUPBOX "Tracking",IDC_STATIC,7,25,139,59\r
+ GROUPBOX "Presentation",IDC_STATIC,7,87,139,57\r
+ CONTROL "Follow mouse cursor",IDC_FOLLOWMOUSECHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,42,114,10\r
+ CONTROL "Follow keyboard focus",IDC_FOLOWKEYBOARDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,114,10\r
+ CONTROL "Follow text editing",IDC_FOLLOWTEXTEDITINGCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,114,10\r
+ CONTROL "Invert colors",IDC_INVERTCOLORSCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,102,114,10\r
+ CONTROL "Start Minimized",IDC_STARTMINIMIZEDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,114,114,10\r
+ CONTROL "Show Magnifier",IDC_SHOWMAGNIFIERCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,126,114,10\r
+END\r
+\r
+IDD_WARNINGDIALOG DIALOGEX 0, 0, 250, 97\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION\r
+CAPTION "ReactOS Magnifier"\r
+FONT 8, "MS Shell Dlg", 400, 0, 0x1\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,193,76,50,14\r
+ ICON IDI_MAGNIFIER,IDC_STATIC,7,17,20,20\r
+ LTEXT "Magnifier is intended to provide a minium level of funcionality for users with slight visual impairments. Most users with visual impairments will need a magnigication utility with higher funcionality for deily use.",IDC_STATIC,36,7,207,33\r
+ CONTROL "Do not show this message again",IDC_SHOWWARNINGCHECK,\r
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,43,80,137,10\r
+END\r
+\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE \r
+BEGIN\r
+ "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE \r
+BEGIN\r
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+ "#include ""windows.h""\r\n"\r
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+ "\0"\r
+END\r
+\r
+3 TEXTINCLUDE \r
+BEGIN\r
+ "\r\n"\r
+ "\0"\r
+END\r
+\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO \r
+BEGIN\r
+ IDD_DIALOGOPTIONS, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 146\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 175\r
+ END\r
+\r
+ IDD_WARNINGDIALOG, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 243\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 90\r
+ END\r
+END\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE \r
+BEGIN\r
+ IDS_APP_TITLE "Magnifier"\r
+ IDC_MAGNIFIER "MAGNIFIER"\r
+END\r
+\r
+#endif // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif // not APSTUDIO_INVOKED\r
+\r
--- /dev/null
+/*\r
+ * PROJECT: ReactOS Magnify\r
+ * LICENSE: GPL - See COPYING in the top level directory\r
+ * FILE: base/applications/magnify/magnifier.c\r
+ * PURPOSE: \r
+ * COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>\r
+ *\r
+ */\r
+\r
+#include <windows.h>\r
+//#include <stdio.h>\r
+#include <shellapi.h>\r
+\r
+#include "shellapi.h"\r
+#include "windows.h"\r
+\r
+#include "magnifier.h"\r
+#include "resource.h"\r
+\r
+#define MAX_LOADSTRING 100\r
+\r
+// Global Variables:\r
+HINSTANCE hInst; // current instance\r
+HWND hMainWnd;\r
+\r
+TCHAR szTitle[MAX_LOADSTRING]; // The title bar text\r
+TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name\r
+\r
+#define REPAINT_SPEED 100\r
+\r
+HWND hDesktopWindow = NULL;\r
+\r
+//Current magnified area\r
+POINT cp;\r
+\r
+//Last positions\r
+POINT pMouse;\r
+POINT pCaret;\r
+POINT pFocus;\r
+\r
+// Forward declarations of functions included in this code module:\r
+ATOM MyRegisterClass(HINSTANCE hInstance);\r
+BOOL InitInstance(HINSTANCE, int);\r
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\r
+INT_PTR CALLBACK AboutProc(HWND, UINT, WPARAM, LPARAM);\r
+INT_PTR CALLBACK OptionsProc(HWND, UINT, WPARAM, LPARAM);\r
+INT_PTR CALLBACK WarningProc(HWND, UINT, WPARAM, LPARAM);\r
+\r
+int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)\r
+{\r
+ UNREFERENCED_PARAMETER(hPrevInstance);\r
+ UNREFERENCED_PARAMETER(lpCmdLine);\r
+\r
+ // TODO: Place code here.\r
+ MSG msg;\r
+ HACCEL hAccelTable;\r
+\r
+ // Initialize global strings\r
+ LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);\r
+ LoadString(hInstance, IDC_MAGNIFIER, szWindowClass, MAX_LOADSTRING);\r
+ MyRegisterClass(hInstance);\r
+\r
+ // Perform application initialization:\r
+ if (!InitInstance (hInstance, nCmdShow))\r
+ {\r
+ return FALSE;\r
+ }\r
+\r
+ hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MAGNIFIER));\r
+\r
+ // Main message loop:\r
+ while (GetMessage(&msg, NULL, 0, 0))\r
+ {\r
+ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))\r
+ {\r
+ TranslateMessage(&msg);\r
+ DispatchMessage(&msg);\r
+ }\r
+ }\r
+\r
+ return (int) msg.wParam;\r
+}\r
+\r
+\r
+\r
+//\r
+// FUNCTION: MyRegisterClass()\r
+//\r
+// PURPOSE: Registers the window class.\r
+//\r
+// COMMENTS:\r
+//\r
+// This function and its usage are only necessary if you want this code\r
+// to be compatible with Win32 systems prior to the 'RegisterClassEx'\r
+// function that was added to Windows 95. It is important to call this function\r
+// so that the application will get 'well formed' small icons associated\r
+// with it.\r
+//\r
+ATOM MyRegisterClass(HINSTANCE hInstance)\r
+{\r
+ WNDCLASSEX wcex;\r
+\r
+ wcex.cbSize = sizeof(WNDCLASSEX);\r
+\r
+ wcex.style = CS_HREDRAW | CS_VREDRAW; \r
+ wcex.lpfnWndProc = WndProc;\r
+ wcex.cbClsExtra = 0;\r
+ wcex.cbWndExtra = 0;\r
+ wcex.hInstance = hInstance;\r
+ wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAGNIFIER));\r
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);\r
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);\r
+ wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MAGNIFIER);\r
+ wcex.lpszClassName = szWindowClass;\r
+ wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));\r
+\r
+ return RegisterClassEx(&wcex);\r
+}\r
+\r
+//\r
+// FUNCTION: InitInstance(HINSTANCE, int)\r
+//\r
+// PURPOSE: Saves instance handle and creates main window\r
+//\r
+// COMMENTS:\r
+//\r
+// In this function, we save the instance handle in a global variable and\r
+// create and display the main program window.\r
+//\r
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)\r
+{\r
+ hInst = hInstance; // Store instance handle in our global variable\r
+\r
+ // Create the Window\r
+ hMainWnd = CreateWindowEx(\r
+ WS_EX_TOPMOST,\r
+ szWindowClass, \r
+ szTitle, \r
+ WS_OVERLAPPEDWINDOW,\r
+ CW_USEDEFAULT, \r
+ CW_USEDEFAULT, \r
+ CW_USEDEFAULT, \r
+ CW_USEDEFAULT, \r
+ NULL, \r
+ NULL, \r
+ hInstance, \r
+ NULL);\r
+\r
+ if (!hMainWnd)\r
+ {\r
+ return FALSE;\r
+ }\r
+\r
+ ShowWindow(hMainWnd, nCmdShow);\r
+ UpdateWindow(hMainWnd);\r
+\r
+ return TRUE;\r
+}\r
+\r
+void Refresh ()\r
+{\r
+ if (!IsIconic(hMainWnd))\r
+ {\r
+ // Invalidate the client area forcing a WM_PAINT message \r
+ InvalidateRgn(hMainWnd, NULL, TRUE); \r
+ }\r
+}\r
+\r
+void Draw(HDC aDc)\r
+{\r
+ HDC desktopHdc = NULL;\r
+ HDC HdcStrech;\r
+ HANDLE hOld;\r
+ HBITMAP HbmpStrech;\r
+\r
+ RECT R;\r
+ RECT appRect;\r
+ DWORD rop = SRCCOPY;\r
+ HCURSOR hCursor;\r
+ CURSORINFO info;\r
+\r
+ desktopHdc = GetWindowDC (hDesktopWindow);\r
+\r
+ GetClientRect(hMainWnd, &appRect);\r
+ GetWindowRect(hDesktopWindow, &R);\r
+\r
+ memset(&info, 0, sizeof(info));\r
+ info.cbSize = sizeof(info);\r
+ GetCursorInfo(&info);\r
+ hCursor = info.hCursor;\r
+\r
+ /* Create a memory DC compatible with client area DC.*/ \r
+ HdcStrech = CreateCompatibleDC(desktopHdc); \r
+ \r
+ /* Create a bitmap compatible with the client area DC.*/ \r
+ HbmpStrech = CreateCompatibleBitmap(\r
+ desktopHdc,\r
+ R.right,\r
+ R.bottom); \r
+\r
+ /* Select our bitmap in memory DC and save the old one.*/ \r
+ hOld = SelectObject (HdcStrech , HbmpStrech);\r
+\r
+ /* Paint the screen bitmap to our in memory DC */\r
+ BitBlt(\r
+ HdcStrech,\r
+ 0,\r
+ 0,\r
+ R.right,\r
+ R.bottom,\r
+ desktopHdc,\r
+ 0,\r
+ 0,\r
+ SRCCOPY);\r
+\r
+ /* Draw the mouse pointer in the right position */\r
+ DrawIcon(\r
+ HdcStrech , \r
+ pMouse.x - 10, \r
+ pMouse.y - 10, \r
+ hCursor);\r
+\r
+ int Width = (R.right - R.left);\r
+ int Height = (R.bottom - R.top);\r
+\r
+ int AppWidth = (appRect.right - appRect.left);\r
+ int AppHeight = (appRect.bottom - appRect.top);\r
+\r
+ LONG blitAreaWidth = AppWidth / iZoom;\r
+ LONG blitAreaHeight = AppHeight / iZoom;\r
+\r
+ LONG blitAreaX = (cp.x) - (blitAreaWidth /2);\r
+ LONG blitAreaY = (cp.y) - (blitAreaHeight /2);\r
+\r
+ if (blitAreaX < 0)\r
+ {\r
+ blitAreaX = 0;\r
+ }\r
+\r
+ if (blitAreaY < 0)\r
+ {\r
+ blitAreaY = 0;\r
+ }\r
+\r
+ if (blitAreaX > (Width - blitAreaWidth))\r
+ {\r
+ blitAreaX = (Width - blitAreaWidth);\r
+ }\r
+\r
+ if (blitAreaY > (Height - blitAreaHeight))\r
+ {\r
+ blitAreaY = (Height - blitAreaHeight);\r
+ }\r
+\r
+ if (bInvertColors)\r
+ {\r
+ rop = NOTSRCCOPY;\r
+ }\r
+\r
+ StretchBlt(\r
+ HdcStrech,\r
+ 0,\r
+ 0,\r
+ AppWidth,\r
+ AppHeight,\r
+ HdcStrech,\r
+ blitAreaX,\r
+ blitAreaY,\r
+ blitAreaWidth,\r
+ blitAreaHeight,\r
+ rop);\r
+\r
+ /* Blast the image from memory DC to client DC.*/ \r
+ BitBlt (\r
+ aDc,\r
+ 0 , \r
+ 0 , \r
+ AppWidth ,\r
+ AppHeight ,\r
+ HdcStrech ,\r
+ 0 ,\r
+ 0 , \r
+ SRCCOPY);\r
+\r
+ /* Cleanup.*/ \r
+ SelectObject (HdcStrech, hOld);\r
+ DeleteObject (HbmpStrech);\r
+ DeleteDC (HdcStrech);\r
+}\r
+\r
+//\r
+// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)\r
+//\r
+// PURPOSE: Processes messages for the main window.\r
+//\r
+// WM_COMMAND - process the application menu\r
+// WM_PAINT - Paint the main window\r
+// WM_DESTROY - post a quit message and return\r
+//\r
+//\r
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ int wmId, wmEvent;\r
+\r
+ switch (message)\r
+ {\r
+ case WM_TIMER:\r
+ {\r
+ POINT pNewMouse;\r
+ POINT pNewCaret;\r
+ POINT pNewFocus;\r
+\r
+ //Get current mouse position \r
+ GetCursorPos (&pNewMouse);\r
+\r
+ //Get caret position\r
+ HWND hwnd1 = GetForegroundWindow (); \r
+ DWORD a = GetWindowThreadProcessId(hwnd1, NULL); \r
+ DWORD b = GetCurrentThreadId(); \r
+ AttachThreadInput (a, b, TRUE); \r
+ HWND hwnd2 = GetFocus(); \r
+\r
+ GetCaretPos( &pNewCaret); \r
+ ClientToScreen (hwnd2, (LPPOINT) &pNewCaret); \r
+ AttachThreadInput (a, b, FALSE); \r
+\r
+ //Get current control focus\r
+ HWND hwnd3 = GetFocus ();\r
+ RECT controlRect;\r
+ GetWindowRect (hwnd3 , &controlRect);\r
+ pNewFocus.x = controlRect.left;\r
+ pNewFocus.y = controlRect.top;\r
+\r
+ //If mouse has moved ....\r
+ if (((pMouse.x != pNewMouse.x) || (pMouse.y != pNewMouse.y)) && bFollowMouse)\r
+ {\r
+ //Update to new position\r
+ pMouse = pNewMouse;\r
+ cp = pNewMouse;\r
+ Refresh();\r
+ }\r
+ else if (((pCaret.x != pNewCaret.x) || (pCaret.y != pNewCaret.y)) && bFollowCaret)\r
+ {\r
+ //Update to new position\r
+ pCaret = pNewCaret;\r
+ cp = pNewCaret;\r
+ Refresh();\r
+ }\r
+ else if (((pFocus.x != pNewFocus.x) || (pFocus.y != pNewFocus.y)) && bFollowFocus)\r
+ {\r
+ //Update to new position\r
+ pFocus = pNewFocus;\r
+ cp = pNewFocus;\r
+ Refresh();\r
+ }\r
+ }\r
+ break;\r
+ case WM_COMMAND:\r
+ wmId = LOWORD(wParam);\r
+ wmEvent = HIWORD(wParam);\r
+ // Parse the menu selections:\r
+ switch (wmId)\r
+ {\r
+ case IDM_OPTIONS:\r
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOGOPTIONS), hWnd, (DLGPROC)OptionsProc);\r
+ break;\r
+ case IDM_ABOUT:\r
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)AboutProc);\r
+ break;\r
+ case IDM_EXIT:\r
+ DestroyWindow(hWnd);\r
+ break;\r
+ default:\r
+ return DefWindowProc(hWnd, message, wParam, lParam);\r
+ }\r
+ break;\r
+ case WM_PAINT:\r
+ {\r
+ PAINTSTRUCT PaintStruct;\r
+ HDC dc;\r
+ dc = BeginPaint(hWnd, &PaintStruct);\r
+ Draw(dc);\r
+ EndPaint(hWnd, &PaintStruct);\r
+ }\r
+ break;\r
+ case WM_ERASEBKGND:\r
+ //handle WM_ERASEBKGND by simply returning non-zero because we did all the drawing in WM_PAINT. \r
+ break;\r
+ case WM_DESTROY:\r
+ //Save settings to registry\r
+ SaveSettings ();\r
+ KillTimer (hWnd , 1);\r
+ PostQuitMessage(0);\r
+ break;\r
+ case WM_CREATE:\r
+ //Load settings from registry\r
+ LoadSettings ();\r
+\r
+ //Get the desktop window\r
+ hDesktopWindow = GetDesktopWindow();\r
+ \r
+ if (bShowWarning)\r
+ {\r
+ DialogBox (hInst, MAKEINTRESOURCE(IDD_WARNINGDIALOG), hWnd, (DLGPROC)WarningProc);\r
+ }\r
+\r
+ if (bStartMinimized)\r
+ {\r
+ ShowWindow (hMainWnd, SW_MINIMIZE );\r
+ }\r
+ \r
+ //Set the timer \r
+ SetTimer (hWnd , 1, REPAINT_SPEED , NULL);\r
+ break;\r
+ default:\r
+ return DefWindowProc(hWnd, message, wParam, lParam);\r
+ }\r
+ return 0;\r
+}\r
+\r
+// Message handler for about box.\r
+INT_PTR CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+ switch (message)\r
+ {\r
+ case WM_INITDIALOG:\r
+ return (INT_PTR)TRUE;\r
+\r
+ case WM_COMMAND:\r
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)\r
+ {\r
+ EndDialog(hDlg, LOWORD(wParam));\r
+ return (INT_PTR)TRUE;\r
+ }\r
+ break;\r
+ }\r
+ return (INT_PTR)FALSE;\r
+}\r
+\r
+// Message handler for options box.\r
+INT_PTR CALLBACK OptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+ switch (message)\r
+ {\r
+ case WM_INITDIALOG:\r
+ {\r
+ //Add the zoom items....\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("1"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("2"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("3"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("4"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("5"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("6"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("7"));\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_ADDSTRING, 0, (LPARAM)("8"));\r
+\r
+ //\r
+ SendDlgItemMessage(hDlg, IDC_ZOOM, CB_SETCURSEL, iZoom - 1, 0);\r
+\r
+ if (bFollowMouse)\r
+ SendDlgItemMessage(hDlg,IDC_FOLLOWMOUSECHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ if (bFollowFocus)\r
+ SendDlgItemMessage(hDlg,IDC_FOLOWKEYBOARDCHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ if (bFollowCaret)\r
+ SendDlgItemMessage(hDlg,IDC_FOLLOWTEXTEDITINGCHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ if (bInvertColors)\r
+ SendDlgItemMessage(hDlg,IDC_INVERTCOLORSCHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ if (bStartMinimized)\r
+ SendDlgItemMessage(hDlg,IDC_STARTMINIMIZEDCHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ if (bShowMagnifier)\r
+ SendDlgItemMessage(hDlg,IDC_SHOWMAGNIFIERCHECK,BM_SETCHECK , wParam ,0);\r
+\r
+ return (INT_PTR)TRUE;\r
+ }\r
+ case WM_COMMAND:\r
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)\r
+ {\r
+ EndDialog(hDlg, LOWORD(wParam));\r
+ return (INT_PTR)TRUE;\r
+ }\r
+ if (LOWORD(wParam) == IDOK)\r
+ {\r
+ }\r
+ if (LOWORD(wParam) == IDHELP)\r
+ {\r
+ MessageBox(hDlg , TEXT("Magnifier help not available yet!") , TEXT("Help") , MB_OK);\r
+ }\r
+ switch(LOWORD(wParam))\r
+ {\r
+ case IDC_ZOOM:\r
+ if(HIWORD(wParam) == CBN_SELCHANGE) \r
+ { \r
+ HWND hCombo = GetDlgItem(hDlg,IDC_ZOOM);\r
+\r
+ /* Get index of current selection and the text of that selection. */ \r
+ iZoom = SendMessage( hCombo, CB_GETCURSEL, (WPARAM) wParam, (LPARAM) lParam ) + 1;\r
+\r
+ //Update the magnigier UI\r
+ Refresh ();\r
+ }\r
+ break;\r
+ case IDC_INVERTCOLORSCHECK:\r
+ bInvertColors = IsDlgButtonChecked (hDlg, IDC_INVERTCOLORSCHECK);\r
+ Refresh ();\r
+ break;\r
+ case IDC_FOLLOWMOUSECHECK:\r
+ bFollowMouse = IsDlgButtonChecked (hDlg, IDC_FOLLOWMOUSECHECK);\r
+ break;\r
+ case IDC_FOLOWKEYBOARDCHECK:\r
+ bFollowFocus = IsDlgButtonChecked (hDlg, IDC_FOLOWKEYBOARDCHECK);\r
+ break;\r
+ case IDC_FOLLOWTEXTEDITINGCHECK:\r
+ bFollowCaret = IsDlgButtonChecked (hDlg, IDC_FOLLOWTEXTEDITINGCHECK);\r
+ break;\r
+ case IDC_STARTMINIMIZEDCHECK:\r
+ bStartMinimized = IsDlgButtonChecked (hDlg, IDC_STARTMINIMIZEDCHECK);\r
+ break;\r
+ case IDC_SHOWMAGNIFIER:\r
+ bShowMagnifier = IsDlgButtonChecked (hDlg, IDC_SHOWMAGNIFIERCHECK);\r
+ if (bShowMagnifier){\r
+ ShowWindow (hMainWnd , SW_SHOW);\r
+ }else{\r
+ ShowWindow (hMainWnd , SW_HIDE);\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ return (INT_PTR)FALSE;\r
+}\r
+\r
+// Message handler for warning box.\r
+INT_PTR CALLBACK WarningProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+\r
+ switch (message)\r
+ {\r
+ case WM_INITDIALOG:\r
+ return (INT_PTR)TRUE;\r
+ case WM_COMMAND:\r
+ switch(LOWORD(wParam))\r
+ {\r
+ case IDC_SHOWWARNINGCHECK:\r
+ bShowWarning = !IsDlgButtonChecked (hDlg, IDC_SHOWWARNINGCHECK);\r
+ break;\r
+ }\r
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)\r
+ {\r
+ EndDialog(hDlg, LOWORD(wParam));\r
+ return (INT_PTR)TRUE;\r
+ }\r
+ break;\r
+ }\r
+ return (INT_PTR)FALSE;\r
+}\r
--- /dev/null
+/*\r
+ * WineCalc (magnifier.h)\r
+ *\r
+ * Copyright 2007 Marc Piulachs\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 2.1 of the License, or (at your option) any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ */\r
+\r
+//////////////////////////////////////////////////////////////////\r
+\r
+int iZoom;\r
+\r
+BOOL bShowWarning;\r
+\r
+BOOL bFollowMouse;\r
+BOOL bFollowFocus;\r
+BOOL bFollowCaret;\r
+\r
+BOOL bInvertColors;\r
+BOOL bStartMinimized;\r
+BOOL bShowMagnifier;\r
+\r
+void LoadSettings();\r
+void SaveSettings();\r
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">\r
+<module name="magnify" type="win32gui" installbase="system32" installname="magnify.exe">\r
+ <include base="magnify">.</include>\r
+ <define name="__USE_W32API" />\r
+ <define name="_WIN32_IE">0x0600</define>\r
+ <define name="_WIN32_WINNT">0x0501</define>\r
+ <library>user32</library>\r
+ <library>gdi32</library>\r
+ <library>advapi32</library>\r
+ <library>shell32</library>\r
+ <library>kernel32</library>\r
+ <file>magnifier.c</file>\r
+ <file>settings.c</file>\r
+ <file>magnify.rc</file>\r
+</module>\r
--- /dev/null
+#include <windows.h>\r
+#include <commctrl.h>\r
+#include "resource.h"\r
+\r
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Magnifier\0"\r
+#define REACTOS_STR_INTERNAL_NAME "magnify\0"\r
+#define REACTOS_STR_ORIGINAL_FILENAME "magnify.exe\0"\r
+\r
+#include <reactos/version.rc>\r
+\r
+#include "lang/en-US.rc"\r
--- /dev/null
+//{{NO_DEPENDENCIES}}\r
+// Microsoft Visual C++ generated include file.\r
+// Used by Magnifier.rc\r
+//\r
+#define IDC_MYICON 2\r
+#define IDD_MAGNIFIER_DIALOG 102\r
+#define IDS_APP_TITLE 103\r
+#define IDD_ABOUTBOX 103\r
+#define IDM_ABOUT 104\r
+#define IDM_EXIT 105\r
+#define IDI_MAGNIFIER 107\r
+#define IDI_SMALL 108\r
+#define IDC_MAGNIFIER 109\r
+#define IDR_MAINFRAME 128\r
+#define IDD_DIALOGOPTIONS 129\r
+#define IDD_WARNINGDIALOG 130\r
+#define IDC_ZOOM 1000\r
+#define IDC_CHECK1 1001\r
+#define IDC_FOLOWKEYBOARDCHECK 1002\r
+#define IDC_FOLLOWTEXTEDITINGCHECK 1003\r
+#define IDC_INVERTCOLORSCHECK 1004\r
+#define IDC_STARTMINIMIZEDCHECK 1005\r
+#define IDC_SHOWMAGNIFIER 1006\r
+#define IDC_SHOWMAGNIFIERCHECK 1006\r
+#define IDC_FOLLOWMOUSECHECK 1007\r
+#define IDC_SHOWWARNINGCHECK 1009\r
+#define IDC_BUTTON1 1008\r
+#define ID_FILE_OPTIONS 32771\r
+#define ID_OPTIONS 32772\r
+#define IDM_OPTIONS 32773\r
+#define IDC_STATIC -1\r
+\r
+// Next default values for new objects\r
+// \r
+#ifdef APSTUDIO_INVOKED\r
+#ifndef APSTUDIO_READONLY_SYMBOLS\r
+#define _APS_NO_MFC 1\r
+#define _APS_NEXT_RESOURCE_VALUE 131\r
+#define _APS_NEXT_COMMAND_VALUE 32774\r
+#define _APS_NEXT_CONTROL_VALUE 1009\r
+#define _APS_NEXT_SYMED_VALUE 110\r
+#endif\r
+#endif\r
--- /dev/null
+#include <windows.h>\r
+#include <tchar.h>\r
+#include "magnifier.h"\r
+\r
+int iZoom = 3;\r
+\r
+BOOL bShowWarning = TRUE;\r
+\r
+BOOL bFollowMouse = TRUE;\r
+BOOL bFollowFocus = TRUE;\r
+BOOL bFollowCaret = TRUE;\r
+\r
+BOOL bInvertColors = FALSE;\r
+BOOL bStartMinimized = FALSE;\r
+BOOL bShowMagnifier = TRUE;\r
+\r
+void LoadSettings()\r
+{\r
+ HKEY hkey;\r
+ LONG value;\r
+ ULONG len;\r
+\r
+ RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0,\r
+ _T(""), 0, KEY_READ, NULL, &hkey, NULL);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryMagLevel"), 0, 0, (BYTE *)&value, &len))\r
+ {\r
+ if(value >= 0 && value <= 9)\r
+ iZoom = value;\r
+ }\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("ShowWarning"), 0, 0, (BYTE *)&value, &len))\r
+ bShowWarning = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryInvertColors"), 0, 0, (BYTE *)&value, &len))\r
+ bInvertColors = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryStartMinimized"), 0, 0, (BYTE *)&value, &len))\r
+ bStartMinimized = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryTrackCursor"), 0, 0, (BYTE *)&value, &len))\r
+ bFollowMouse = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryTrackFocus"), 0, 0, (BYTE *)&value, &len))\r
+ bFollowFocus = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryTrackSecondaryFocus"), 0, 0, (BYTE *)&value, &len))\r
+ bFollowFocus = (value == 0 ? FALSE : TRUE);\r
+\r
+ if(ERROR_SUCCESS == RegQueryValueEx(hkey, _T("StationaryTrackText"), 0, 0, (BYTE *)&value, &len))\r
+ bFollowCaret = (value == 0 ? FALSE : TRUE);\r
+\r
+ RegCloseKey(hkey);\r
+}\r
+\r
+void SaveSettings()\r
+{\r
+ HKEY hkey;\r
+ LONG value;\r
+\r
+ RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0,\r
+ _T(""), 0, KEY_WRITE, NULL, &hkey, NULL);\r
+\r
+ value = iZoom;\r
+ RegSetValueEx(hkey, _T("StationaryMagLevel"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bShowWarning;\r
+ RegSetValueEx(hkey, _T("ShowWarning"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bInvertColors;\r
+ RegSetValueEx(hkey, _T("StationaryInvertColors"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bStartMinimized;\r
+ RegSetValueEx(hkey, _T("StationaryStartMinimized"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bFollowMouse;\r
+ RegSetValueEx(hkey, _T("StationaryTrackCursor"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bFollowFocus;\r
+ RegSetValueEx(hkey, _T("StationaryTrackFocus"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bFollowFocus;\r
+ RegSetValueEx(hkey, _T("StationaryTrackSecondaryFocus"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ value = bFollowCaret;\r
+ RegSetValueEx(hkey, _T("StationaryTrackText"), 0, REG_DWORD, (BYTE *)&value, sizeof value);\r
+\r
+ RegCloseKey(hkey);\r
+}\r