diff --git a/rosapps/devutils/zoomin/framewnd.c b/rosapps/devutils/zoomin/framewnd.c index 3f011d26bcd..3cd95e4688b 100644 --- a/rosapps/devutils/zoomin/framewnd.c +++ b/rosapps/devutils/zoomin/framewnd.c @@ -42,9 +42,32 @@ static RECT s_lastSrc = {-1,-1,-1,-1}; // last cursor position BOOL s_dragging = FALSE; + // zoom range + +#define MIN_ZOOM 1 +#define MAX_ZOOM 16 + + //////////////////////////////////////////////////////////////////////////////// -// Local module support methods // +// FUNCTION: SetZoom() +// +// PURPOSE: Change zoom level +// + +static void SetZoom(HWND hWnd, int factor) +{ + TCHAR buffer[MAX_LOADSTRING]; + + if (factor>=MIN_ZOOM && factor<=MAX_ZOOM) { + s_factor = factor; + + SetScrollPos(hWnd, SB_VERT, s_factor, TRUE); + + wsprintf(buffer, TEXT("%s %dx"), szTitle, s_factor); + SetWindowText(hWnd, buffer); + } +} //////////////////////////////////////////////////////////////////////////////// @@ -70,6 +93,10 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // TODO: break; + case ID_REFRESH: + InvalidateRect(hWnd, NULL, FALSE); + break; + default: return FALSE; } @@ -89,6 +116,8 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa switch (message) { case WM_CREATE: SetTimer(hWnd, 0, 200, NULL); // refresh display all 200 ms + SetScrollRange(hWnd, SB_VERT, 1, MAX_ZOOM, FALSE); + SetZoom(hWnd, s_factor); break; case WM_COMMAND: @@ -107,10 +136,11 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa hdcMem = GetDC(GetDesktopWindow()); GetClientRect(hWnd, &clnt); - size.cx = clnt.right / s_factor; - size.cy = clnt.bottom / s_factor; + size.cx = (clnt.right + s_factor-1) / s_factor; + size.cy = (clnt.bottom + s_factor-1) / s_factor; - StretchBlt(ps.hdc, 0, 0, size.cx*s_factor, size.cy*s_factor, hdcMem, s_srcPos.x, s_srcPos.y, size.cx, size.cy, SRCCOPY); + StretchBlt(ps.hdc, 0, 0, size.cx*s_factor, size.cy*s_factor, + hdcMem, s_srcPos.x, s_srcPos.y, size.cx, size.cy, SRCCOPY); ReleaseDC(GetDesktopWindow(), hdcMem); EndPaint(hWnd, &ps); @@ -181,6 +211,20 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa } break; + case WM_VSCROLL: + switch(wParam) { + case SB_LINEUP: + case SB_PAGEUP: + SetZoom(hWnd, s_factor-1); + break; + + case SB_LINEDOWN: + case SB_PAGEDOWN: + SetZoom(hWnd, s_factor+1); + break; + } + break; + case WM_DESTROY: KillTimer(hWnd, 0); PostQuitMessage(0); diff --git a/rosapps/devutils/zoomin/framewnd.h b/rosapps/devutils/zoomin/framewnd.h index 813a90c1f79..735891b1f08 100644 --- a/rosapps/devutils/zoomin/framewnd.h +++ b/rosapps/devutils/zoomin/framewnd.h @@ -23,17 +23,10 @@ #ifndef __FRAMEWND_H__ #define __FRAMEWND_H__ -#ifdef __cplusplus -extern "C" { -#endif - - LRESULT CALLBACK FrameWndProc(HWND, UINT, WPARAM, LPARAM); -#ifdef __cplusplus -}; -#endif +#define WNDCLASS_ZOOMIN TEXT("ZOOMIN") + #endif // __FRAMEWND_H__ - diff --git a/rosapps/devutils/zoomin/main.c b/rosapps/devutils/zoomin/main.c index 6f1d4579e1e..1a84f260d45 100644 --- a/rosapps/devutils/zoomin/main.c +++ b/rosapps/devutils/zoomin/main.c @@ -38,7 +38,6 @@ HWND hFrameWnd; HMENU hMenuFrame; TCHAR szTitle[MAX_LOADSTRING]; -TCHAR szFrameClass[MAX_LOADSTRING]; //////////////////////////////////////////////////////////////////////////////// @@ -61,7 +60,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) LoadCursor(0, IDC_ARROW), 0,//(HBRUSH)(COLOR_BTNFACE+1), 0/*lpszMenuName*/, - szFrameClass, + WNDCLASS_ZOOMIN, (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ZOOMIN), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED) }; @@ -70,7 +69,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) hMenuFrame = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_ZOOMIN_MENU)); hFrameWnd = CreateWindowEx(0, (LPCTSTR)(int)hFrameWndClass, szTitle, - WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE, + WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, 250, 250, NULL, hMenuFrame, hInstance, NULL/*lpParam*/); @@ -80,6 +79,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) ShowWindow(hFrameWnd, nCmdShow); UpdateWindow(hFrameWnd); + return TRUE; } @@ -97,22 +97,21 @@ int APIENTRY WinMain(HINSTANCE hInstance, int nCmdShow) { MSG msg; - HACCEL hAccel; + HACCEL hAccel; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); - LoadString(hInstance, IDC_ZOOMIN, szFrameClass, MAX_LOADSTRING); // Perform application initialization: if (!InitInstance(hInstance, nCmdShow)) { return FALSE; } - hAccel = LoadAccelerators(hInstance, (LPCTSTR)IDC_ZOOMIN); + hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ZOOMIN)); // Main message loop: while (GetMessage(&msg, (HWND)NULL, 0, 0)) { - if (!TranslateAccelerator(msg.hwnd, hAccel, &msg)) { + if (!TranslateAccelerator(msg.hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } diff --git a/rosapps/devutils/zoomin/main.h b/rosapps/devutils/zoomin/main.h index b83def9c417..3ed7d1b7c6a 100644 --- a/rosapps/devutils/zoomin/main.h +++ b/rosapps/devutils/zoomin/main.h @@ -23,11 +23,6 @@ #ifndef __MAIN_H__ #define __MAIN_H__ -#ifdef __cplusplus -extern "C" { -#endif - - #include "resource.h" #define MAX_LOADSTRING 100 @@ -40,11 +35,6 @@ extern HWND hFrameWnd; extern HMENU hMenuFrame; extern TCHAR szTitle[]; -extern TCHAR szFrameClass[]; -#ifdef __cplusplus -}; -#endif #endif // __MAIN_H__ - diff --git a/rosapps/devutils/zoomin/resource.h b/rosapps/devutils/zoomin/resource.h index 5008122271c..5440f08f6c9 100644 --- a/rosapps/devutils/zoomin/resource.h +++ b/rosapps/devutils/zoomin/resource.h @@ -7,9 +7,8 @@ #define IDS_APP_TITLE 103 #define IDI_ZOOMIN 107 #define IDI_SMALL 108 -#define IDC_ZOOMIN 109 -#define IDR_ZOOMIN_MENU 110 -#define IDD_DIALOG1 111 +#define IDR_ZOOMIN_MENU 109 +#define IDR_ZOOMIN 110 #define ID_EDIT_EXIT 32700 #define ID_EDIT_COPY 32701 @@ -17,5 +16,7 @@ #define ID_OPTIONS_REFRESH_RATE 32704 #define ID_HELP_ABOUT 32703 +#define ID_REFRESH 40001 + #define IDC_STATIC -1 diff --git a/rosapps/devutils/zoomin/zoomin.rc b/rosapps/devutils/zoomin/zoomin.rc index a2682abb1c5..27c7aff0ce1 100644 --- a/rosapps/devutils/zoomin/zoomin.rc +++ b/rosapps/devutils/zoomin/zoomin.rc @@ -31,12 +31,14 @@ IDI_ZOOMIN ICON DISCARDABLE "res/zoomin.ico" IDR_ZOOMIN_MENU MENU DISCARDABLE BEGIN + POPUP "&File" + BEGIN + MENUITEM "E&xit\tAlt-F4", ID_EDIT_EXIT + END POPUP "&Edit" BEGIN MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY, GRAYED - MENUITEM "&Refresh\tF5", ID_EDIT_REFRESH, GRAYED - MENUITEM SEPARATOR - MENUITEM "E&xit\tAlt-F4", ID_EDIT_EXIT + MENUITEM "&Refresh\tF5", ID_EDIT_REFRESH END POPUP "&Options" BEGIN @@ -67,21 +69,6 @@ BEGIN END -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 95 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Dialog" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,129,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 -END - - ///////////////////////////////////////////////////////////////////////////// // // String Table @@ -90,5 +77,15 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_APP_TITLE "ReactOS Zoomin" - IDC_ZOOMIN "ZOOMIN" +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_ZOOMIN ACCELERATORS DISCARDABLE +BEGIN + VK_F5, ID_REFRESH, VIRTKEY, NOINVERT END