From 6bc0fd73634e96ffd3c5c91eeb15f111d019eb39 Mon Sep 17 00:00:00 2001 From: Benedikt Freisen Date: Mon, 17 Aug 2015 12:03:39 +0000 Subject: [PATCH] [MSPAINT_NEW] implement fullscreen view svn path=/trunk/; revision=68733 --- .../applications/mspaint_new/CMakeLists.txt | 1 + .../applications/mspaint_new/fullscreen.cpp | 61 +++++++++++++++++++ .../applications/mspaint_new/fullscreen.h | 31 ++++++++++ .../base/applications/mspaint_new/globalvar.h | 2 + .../base/applications/mspaint_new/main.cpp | 4 ++ .../base/applications/mspaint_new/precomp.h | 1 + .../base/applications/mspaint_new/winproc.cpp | 5 ++ 7 files changed, 105 insertions(+) create mode 100644 reactos/base/applications/mspaint_new/fullscreen.cpp create mode 100644 reactos/base/applications/mspaint_new/fullscreen.h diff --git a/reactos/base/applications/mspaint_new/CMakeLists.txt b/reactos/base/applications/mspaint_new/CMakeLists.txt index 63229439e51..61987e6b4a2 100644 --- a/reactos/base/applications/mspaint_new/CMakeLists.txt +++ b/reactos/base/applications/mspaint_new/CMakeLists.txt @@ -8,6 +8,7 @@ list(APPEND SOURCE dialogs.cpp dib.cpp drawing.cpp + fullscreen.cpp history.cpp imgarea.cpp main.cpp diff --git a/reactos/base/applications/mspaint_new/fullscreen.cpp b/reactos/base/applications/mspaint_new/fullscreen.cpp new file mode 100644 index 00000000000..ed9bda3feca --- /dev/null +++ b/reactos/base/applications/mspaint_new/fullscreen.cpp @@ -0,0 +1,61 @@ +/* + * PROJECT: PAINT for ReactOS + * LICENSE: LGPL + * FILE: base/applications/mspaint_new/fullscreen.cpp + * PURPOSE: Window for fullscreen view + * PROGRAMMERS: Benedikt Freisen + */ + +/* INCLUDES *********************************************************/ + +#include "precomp.h" + +/* FUNCTIONS ********************************************************/ + +LRESULT CFullscreenWindow::OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + SendMessage(WM_SETICON, ICON_BIG, (LPARAM) LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON))); + SendMessage(WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON))); + return 0; +} + +LRESULT CFullscreenWindow::OnCloseOrKeyDownOrLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + mainWindow.ShowWindow(SW_SHOW); + ShowWindow(SW_HIDE); + return 0; +} + +LRESULT CFullscreenWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + PAINTSTRUCT ps; + HDC hDC = BeginPaint(&ps); + RECT rcWnd; + GetWindowRect(&rcWnd); + INT cxDest = imageModel.GetWidth(); + INT cyDest = imageModel.GetHeight(); + INT xDest = (rcWnd.right - rcWnd.left - cxDest) / 2; + INT yDest = (rcWnd.bottom - rcWnd.top - cyDest) / 2; + BitBlt(hDC, xDest, yDest, cxDest, cyDest, imageModel.GetDC(), 0, 0, SRCCOPY); + EndPaint(&ps); + return 0; +} + +LRESULT CFullscreenWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + Invalidate(TRUE); + return 0; +} + +LRESULT CFullscreenWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + SetCursor(LoadCursor(NULL, IDC_ARROW)); + bHandled = FALSE; + return 0; +} + +LRESULT CFullscreenWindow::OnGetText(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + // return caption of the main window, instead + return mainWindow.SendMessage(nMsg, wParam, lParam); +} diff --git a/reactos/base/applications/mspaint_new/fullscreen.h b/reactos/base/applications/mspaint_new/fullscreen.h new file mode 100644 index 00000000000..fe8848955de --- /dev/null +++ b/reactos/base/applications/mspaint_new/fullscreen.h @@ -0,0 +1,31 @@ +/* + * PROJECT: PAINT for ReactOS + * LICENSE: LGPL + * FILE: base/applications/mspaint_new/fullscreen.h + * PURPOSE: Window for fullscreen view + * PROGRAMMERS: Benedikt Freisen + */ + +class CFullscreenWindow : public CWindowImpl +{ +public: + DECLARE_WND_CLASS_EX(_T("FullscreenWindow"), CS_DBLCLKS, COLOR_BACKGROUND) + + BEGIN_MSG_MAP(CFullscreenWindow) + MESSAGE_HANDLER(WM_CREATE, OnCreate) + MESSAGE_HANDLER(WM_CLOSE, OnCloseOrKeyDownOrLButtonDown) + MESSAGE_HANDLER(WM_KEYDOWN, OnCloseOrKeyDownOrLButtonDown) + MESSAGE_HANDLER(WM_LBUTTONDOWN, OnCloseOrKeyDownOrLButtonDown) + MESSAGE_HANDLER(WM_PAINT, OnPaint) + MESSAGE_HANDLER(WM_SIZE, OnSize) + MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) + MESSAGE_HANDLER(WM_GETTEXT, OnGetText) + END_MSG_MAP() + + LRESULT OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnCloseOrKeyDownOrLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnGetText(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); +}; diff --git a/reactos/base/applications/mspaint_new/globalvar.h b/reactos/base/applications/mspaint_new/globalvar.h index a3418727732..da57d0d9e5b 100644 --- a/reactos/base/applications/mspaint_new/globalvar.h +++ b/reactos/base/applications/mspaint_new/globalvar.h @@ -73,6 +73,7 @@ extern BOOL showGrid; extern BOOL showMiniature; class CMainWindow; +class CFullscreenWindow; class CMiniatureWindow; class CToolBox; class CToolSettingsWindow; @@ -84,6 +85,7 @@ class CSizeboxWindow; class CTextEditWindow; extern CMainWindow mainWindow; +extern CFullscreenWindow fullscreenWindow; extern CMiniatureWindow miniature; extern CToolBox toolBoxContainer; extern CToolSettingsWindow toolSettingsWindow; diff --git a/reactos/base/applications/mspaint_new/main.cpp b/reactos/base/applications/mspaint_new/main.cpp index b18f8580e5e..a8931bfb597 100644 --- a/reactos/base/applications/mspaint_new/main.cpp +++ b/reactos/base/applications/mspaint_new/main.cpp @@ -66,6 +66,7 @@ BOOL showGrid = FALSE; BOOL showMiniature = FALSE; CMainWindow mainWindow; +CFullscreenWindow fullscreenWindow; CMiniatureWindow miniature; CToolBox toolBoxContainer; CToolSettingsWindow toolSettingsWindow; @@ -145,6 +146,9 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument RECT mainWindowPos = {0, 0, 544, 375}; // FIXME: use equivalent of CW_USEDEFAULT for position hwnd = mainWindow.Create(HWND_DESKTOP, mainWindowPos, progtitle, WS_OVERLAPPEDWINDOW); + RECT fullscreenWindowPos = {0, 0, 100, 100}; + fullscreenWindow.Create(HWND_DESKTOP, fullscreenWindowPos, NULL, WS_POPUPWINDOW | WS_MAXIMIZE); + RECT miniaturePos = {(LONG) registrySettings.ThumbXPos, (LONG) registrySettings.ThumbYPos, (LONG) registrySettings.ThumbXPos + (LONG) registrySettings.ThumbWidth, (LONG) registrySettings.ThumbYPos + (LONG) registrySettings.ThumbHeight}; diff --git a/reactos/base/applications/mspaint_new/precomp.h b/reactos/base/applications/mspaint_new/precomp.h index 03c120a5c25..b9df84ee817 100644 --- a/reactos/base/applications/mspaint_new/precomp.h +++ b/reactos/base/applications/mspaint_new/precomp.h @@ -21,6 +21,7 @@ #include "definitions.h" #include "drawing.h" #include "dib.h" +#include "fullscreen.h" #include "globalvar.h" #include "history.h" #include "imgarea.h" diff --git a/reactos/base/applications/mspaint_new/winproc.cpp b/reactos/base/applications/mspaint_new/winproc.cpp index f86d21e9f55..de0ba658e39 100644 --- a/reactos/base/applications/mspaint_new/winproc.cpp +++ b/reactos/base/applications/mspaint_new/winproc.cpp @@ -613,6 +613,11 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH case IDM_VIEWZOOM800: zoomTo(8000, 0, 0); break; + + case IDM_VIEWFULLSCREEN: + fullscreenWindow.ShowWindow(SW_SHOW); + ShowWindow(SW_HIDE); + break; } return 0; } -- 2.17.1