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