mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
basic implementation of zoomin functionality
svn path=/trunk/; revision=18355
This commit is contained in:
parent
aeb7ba332c
commit
644b190f61
5 changed files with 120 additions and 73 deletions
|
@ -1,27 +1,29 @@
|
|||
/*
|
||||
* ReactOS zoomin
|
||||
* ReactOS zoomin
|
||||
*
|
||||
* framewnd.c
|
||||
* framewnd.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
* Copyright (C) 2005 Martin Fuchs <martin-fuchs@gmx.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#include "main.h"
|
||||
|
@ -29,9 +31,13 @@
|
|||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global and Local Variables:
|
||||
// Global Variables:
|
||||
//
|
||||
|
||||
static int s_factor = 2; // zoom factor
|
||||
|
||||
static POINT s_srcPos = {0, 0}; // zoom factor
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Local module support methods
|
||||
|
@ -40,61 +46,117 @@
|
|||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG)
|
||||
// FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG)
|
||||
//
|
||||
// PURPOSE: Processes WM_COMMAND messages for the main frame window.
|
||||
// PURPOSE: Processes WM_COMMAND messages for the main frame window.
|
||||
//
|
||||
//
|
||||
|
||||
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (LOWORD(wParam)) {
|
||||
// Parse the menu selections:
|
||||
case ID_EDIT_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
case ID_EDIT_COPY:
|
||||
case ID_EDIT_REFRESH:
|
||||
case ID_OPTIONS_REFRESH_RATE:
|
||||
case ID_HELP_ABOUT:
|
||||
// TODO:
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
// Parse the menu selections:
|
||||
case ID_EDIT_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
|
||||
case ID_EDIT_COPY:
|
||||
case ID_EDIT_REFRESH:
|
||||
case ID_OPTIONS_REFRESH_RATE:
|
||||
case ID_HELP_ABOUT:
|
||||
// TODO:
|
||||
break;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// FUNCTION: FrameWndProc(HWND, unsigned, WORD, LONG)
|
||||
//
|
||||
// PURPOSE: Processes messages for the main frame window.
|
||||
//
|
||||
// WM_COMMAND - process the application menu
|
||||
// WM_DESTROY - post a quit message and return
|
||||
// FUNCTION: FrameWndProc(HWND, unsigned, WORD, LONG)
|
||||
//
|
||||
// PURPOSE: Processes messages for the main window.
|
||||
//
|
||||
|
||||
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message) {
|
||||
case WM_CREATE:
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
switch (message) {
|
||||
case WM_CREATE:
|
||||
SetTimer(hWnd, 0, 200, NULL); // refresh display all 200 ms
|
||||
break;
|
||||
case WM_SIZE:
|
||||
break;
|
||||
case WM_TIMER:
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
default:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
|
||||
case WM_COMMAND:
|
||||
if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_PAINT: {
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdcMem;
|
||||
RECT rect;
|
||||
SIZE size;
|
||||
|
||||
BeginPaint(hWnd, &ps);
|
||||
hdcMem = GetDC(GetDesktopWindow());
|
||||
|
||||
GetClientRect(hWnd, &rect);
|
||||
size.cx = rect.right / s_factor;
|
||||
size.cy = rect.bottom / 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);
|
||||
|
||||
ReleaseDC(GetDesktopWindow(), hdcMem);
|
||||
EndPaint(hWnd, &ps);
|
||||
break;}
|
||||
|
||||
case WM_TIMER:
|
||||
if (GetCapture() == hWnd) {
|
||||
RECT rect;
|
||||
|
||||
int width = GetSystemMetrics(SM_CXSCREEN);
|
||||
int height = GetSystemMetrics(SM_CYSCREEN);
|
||||
|
||||
GetClientRect(hWnd, &rect);
|
||||
|
||||
GetCursorPos(&s_srcPos);
|
||||
|
||||
s_srcPos.x -= rect.right / s_factor / 2;
|
||||
s_srcPos.y -= rect.bottom / s_factor / 2;
|
||||
|
||||
if (s_srcPos.x < 0)
|
||||
s_srcPos.x = 0;
|
||||
else if (s_srcPos.x+rect.right/s_factor > width)
|
||||
s_srcPos.x = width - rect.right/s_factor;
|
||||
|
||||
if (s_srcPos.y < 0)
|
||||
s_srcPos.y = 0;
|
||||
else if (s_srcPos.y+rect.bottom/s_factor > height)
|
||||
s_srcPos.y = height - rect.bottom/s_factor;
|
||||
}
|
||||
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
SetCapture(hWnd);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
ReleaseCapture();
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
KillTimer(hWnd, 0);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
// Global Variables:
|
||||
//
|
||||
|
||||
HINSTANCE hInst;
|
||||
HWND hFrameWnd;
|
||||
HMENU hMenuFrame;
|
||||
|
||||
|
@ -44,15 +43,9 @@ TCHAR szFrameClass[MAX_LOADSTRING];
|
|||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
// FUNCTION: InitInstance(HANDLE, 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.
|
||||
// PURPOSE: creates main window
|
||||
//
|
||||
|
||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||
|
@ -66,7 +59,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
hInstance,
|
||||
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ZOOMIN)),
|
||||
LoadCursor(0, IDC_ARROW),
|
||||
0/*hbrBackground*/,
|
||||
0,//(HBRUSH)(COLOR_BTNFACE+1),
|
||||
0/*lpszMenuName*/,
|
||||
szFrameClass,
|
||||
(HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ZOOMIN), IMAGE_ICON,
|
||||
|
@ -78,7 +71,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
|
||||
hFrameWnd = CreateWindowEx(0, (LPCTSTR)(int)hFrameWndClass, szTitle,
|
||||
WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, 250, 250,
|
||||
NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
|
||||
|
||||
if (!hFrameWnd) {
|
||||
|
@ -110,13 +103,11 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
|
||||
LoadString(hInstance, IDC_ZOOMIN, szFrameClass, MAX_LOADSTRING);
|
||||
|
||||
// Store instance handle in our global variable
|
||||
hInst = hInstance;
|
||||
|
||||
// Perform application initialization:
|
||||
if (!InitInstance(hInstance, nCmdShow)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hAccel = LoadAccelerators(hInstance, (LPCTSTR)IDC_ZOOMIN);
|
||||
|
||||
// Main message loop:
|
||||
|
@ -129,4 +120,3 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
ExitInstance();
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,13 +31,11 @@ extern "C" {
|
|||
#include "resource.h"
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
#define MAX_NAME_LEN 500
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global Variables:
|
||||
//
|
||||
extern HINSTANCE hInst;
|
||||
extern HWND hFrameWnd;
|
||||
extern HMENU hMenuFrame;
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 318 B |
|
@ -3,7 +3,7 @@
|
|||
#include <windows.h>
|
||||
#include "resource.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Zoomin by Robert Dickenson\0"
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Zoomin Utility\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "zoomin\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "zoomin.exe\0"
|
||||
#include <reactos/version.rc>
|
||||
|
@ -17,7 +17,6 @@
|
|||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ZOOMIN ICON DISCARDABLE "res/zoomin.ico"
|
||||
IDI_SMALL ICON DISCARDABLE "res/small.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -93,5 +92,3 @@ BEGIN
|
|||
IDS_APP_TITLE "ReactOS Zoomin"
|
||||
IDC_ZOOMIN "ZOOMIN"
|
||||
END
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue