[MSPAINT]

restructuring:
- put window class initialization where it belongs
- add separate window procedure for the scroll box class

svn path=/trunk/; revision=62117
This commit is contained in:
Benedikt Freisen 2014-02-11 11:48:15 +00:00
parent 26da1ec606
commit a9583308c4
16 changed files with 311 additions and 204 deletions

View file

@ -8,6 +8,7 @@ list(APPEND SOURCE
mouse.c mouse.c
palette.c palette.c
registry.c registry.c
scrollbox.c
selection.c selection.c
sizebox.c sizebox.c
textedit.c textedit.c

View file

@ -11,6 +11,7 @@
#include "precomp.h" #include "precomp.h"
#include "winproc.h" #include "winproc.h"
#include "scrollbox.h"
#include "palette.h" #include "palette.h"
#include "toolsettings.h" #include "toolsettings.h"
#include "selection.h" #include "selection.h"
@ -139,13 +140,6 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
HWND hwnd; /* This is the handle for our window */ HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */ MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wclScroll;
WNDCLASSEX wincl;
WNDCLASSEX wclPal;
WNDCLASSEX wclSettings;
WNDCLASSEX wclSelection;
WNDCLASSEX wclTextEdit;
TCHAR progtitle[1000]; TCHAR progtitle[1000];
TCHAR resstr[100]; TCHAR resstr[100];
HMENU menu; HMENU menu;
@ -192,113 +186,17 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
hProgInstance = hThisInstance; hProgInstance = hThisInstance;
/* Necessary */ /* initialize common controls library */
InitCommonControls(); InitCommonControls();
/* initializing and registering the window class used for the main window */ /* register application defined window classes */
wincl.hInstance = hThisInstance; RegisterWclMain();
wincl.lpszClassName = _T("WindowsApp"); RegisterWclScrollbox();
wincl.lpfnWndProc = WindowProcedure; RegisterWclPal();
wincl.style = CS_DBLCLKS; RegisterWclSettings();
wincl.cbSize = sizeof(WNDCLASSEX); RegisterWclSelection();
wincl.hIcon = LoadIcon(hThisInstance, MAKEINTRESOURCE(IDI_APPICON)); RegisterWclSizebox();
wincl.hIconSm = LoadIcon(hThisInstance, MAKEINTRESOURCE(IDI_APPICON)); RegisterWclTextEdit();
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wincl);
/* initializing and registering the window class used for the scroll box */
wclScroll.hInstance = hThisInstance;
wclScroll.lpszClassName = _T("Scrollbox");
wclScroll.lpfnWndProc = WindowProcedure;
wclScroll.style = 0;
wclScroll.cbSize = sizeof(WNDCLASSEX);
wclScroll.hIcon = NULL;
wclScroll.hIconSm = NULL;
wclScroll.hCursor = LoadCursor(NULL, IDC_ARROW);
wclScroll.lpszMenuName = NULL;
wclScroll.cbClsExtra = 0;
wclScroll.cbWndExtra = 0;
wclScroll.hbrBackground = GetSysColorBrush(COLOR_APPWORKSPACE);
RegisterClassEx (&wclScroll);
/* initializing and registering the window class used for the palette window */
wclPal.hInstance = hThisInstance;
wclPal.lpszClassName = _T("Palette");
wclPal.lpfnWndProc = PalWinProc;
wclPal.style = CS_DBLCLKS;
wclPal.cbSize = sizeof(WNDCLASSEX);
wclPal.hIcon = NULL;
wclPal.hIconSm = NULL;
wclPal.hCursor = LoadCursor(NULL, IDC_ARROW);
wclPal.lpszMenuName = NULL;
wclPal.cbClsExtra = 0;
wclPal.cbWndExtra = 0;
wclPal.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclPal);
/* initializing and registering the window class for the settings window */
wclSettings.hInstance = hThisInstance;
wclSettings.lpszClassName = _T("ToolSettings");
wclSettings.lpfnWndProc = SettingsWinProc;
wclSettings.style = CS_DBLCLKS;
wclSettings.cbSize = sizeof(WNDCLASSEX);
wclSettings.hIcon = NULL;
wclSettings.hIconSm = NULL;
wclSettings.hCursor = LoadCursor(NULL, IDC_ARROW);
wclSettings.lpszMenuName = NULL;
wclSettings.cbClsExtra = 0;
wclSettings.cbWndExtra = 0;
wclSettings.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclSettings);
/* initializing and registering the window class for the selection frame */
wclSelection.hInstance = hThisInstance;
wclSelection.lpszClassName = _T("Selection");
wclSelection.lpfnWndProc = SelectionWinProc;
wclSelection.style = CS_DBLCLKS;
wclSelection.cbSize = sizeof(WNDCLASSEX);
wclSelection.hIcon = NULL;
wclSelection.hIconSm = NULL;
wclSelection.hCursor = LoadCursor(NULL, IDC_SIZEALL);
wclSelection.lpszMenuName = NULL;
wclSelection.cbClsExtra = 0;
wclSelection.cbWndExtra = 0;
wclSelection.hbrBackground = NULL;
RegisterClassEx (&wclSelection);
/* initializing and registering the window class for the size boxes */
wclSettings.hInstance = hThisInstance;
wclSettings.lpszClassName = _T("Sizebox");
wclSettings.lpfnWndProc = SizeboxWinProc;
wclSettings.style = CS_DBLCLKS;
wclSettings.cbSize = sizeof(WNDCLASSEX);
wclSettings.hIcon = NULL;
wclSettings.hIconSm = NULL;
wclSettings.hCursor = LoadCursor(NULL, IDC_ARROW);
wclSettings.lpszMenuName = NULL;
wclSettings.cbClsExtra = 0;
wclSettings.cbWndExtra = 0;
wclSettings.hbrBackground = GetSysColorBrush(COLOR_HIGHLIGHT);
RegisterClassEx (&wclSettings);
/* initializing and registering the window class used for the text editor */
wclTextEdit.hInstance = hThisInstance;
wclTextEdit.lpszClassName = _T("TextEdit");
wclTextEdit.lpfnWndProc = TextEditWinProc;
wclTextEdit.style = CS_DBLCLKS;
wclTextEdit.cbSize = sizeof(WNDCLASSEX);
wclTextEdit.hIcon = LoadIcon(hThisInstance, MAKEINTRESOURCE(IDI_APPICON));
wclTextEdit.hIconSm = LoadIcon(hThisInstance, MAKEINTRESOURCE(IDI_APPICON));
wclTextEdit.hCursor = LoadCursor(NULL, IDC_ARROW);
wclTextEdit.lpszMenuName = NULL;
wclTextEdit.cbClsExtra = 0;
wclTextEdit.cbWndExtra = 0;
wclTextEdit.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclTextEdit);
LoadString(hThisInstance, IDS_DEFAULTFILENAME, filename, SIZEOF(filename)); LoadString(hThisInstance, IDS_DEFAULTFILENAME, filename, SIZEOF(filename));
LoadString(hThisInstance, IDS_WINDOWTITLE, resstr, SIZEOF(resstr)); LoadString(hThisInstance, IDS_WINDOWTITLE, resstr, SIZEOF(resstr));
@ -307,12 +205,12 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
/* create main window */ /* create main window */
hwnd = hwnd =
CreateWindowEx(0, _T("WindowsApp"), progtitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, CreateWindowEx(0, _T("MainWindow"), progtitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544,
375, HWND_DESKTOP, NULL, hThisInstance, NULL); 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
hMainWnd = hwnd; hMainWnd = hwnd;
hwndMiniature = hwndMiniature =
CreateWindowEx(WS_EX_PALETTEWINDOW, _T("WindowsApp"), miniaturetitle, CreateWindowEx(WS_EX_PALETTEWINDOW, _T("MainWindow"), miniaturetitle,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, 180, 200, 120, 100, hwnd, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, 180, 200, 120, 100, hwnd,
NULL, hThisInstance, NULL); NULL, hThisInstance, NULL);
@ -337,7 +235,7 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
hThisInstance, NULL); hThisInstance, NULL);
hToolBoxContainer = hToolBoxContainer =
CreateWindowEx(0, _T("WindowsApp"), _T(""), WS_CHILD | WS_VISIBLE, 2, 2, 52, 350, hwnd, NULL, CreateWindowEx(0, _T("MainWindow"), _T(""), WS_CHILD | WS_VISIBLE, 2, 2, 52, 350, hwnd, NULL,
hThisInstance, NULL); hThisInstance, NULL);
/* creating the 16 bitmap radio buttons and setting the bitmap */ /* creating the 16 bitmap radio buttons and setting the bitmap */
@ -417,7 +315,7 @@ _tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument
/* creating the window inside the scroll box, on which the image in hDrawingDC's bitmap is drawn */ /* creating the window inside the scroll box, on which the image in hDrawingDC's bitmap is drawn */
hImageArea = hImageArea =
CreateWindowEx(0, _T("Scrollbox"), _T(""), WS_CHILD | WS_VISIBLE, 3, 3, imgXRes, imgYRes, hScrlClient, CreateWindowEx(0, _T("MainWindow"), _T(""), WS_CHILD | WS_VISIBLE, 3, 3, imgXRes, imgYRes, hScrlClient,
NULL, hThisInstance, NULL); NULL, hThisInstance, NULL);
hDC = GetDC(hImageArea); hDC = GetDC(hImageArea);

View file

@ -9,9 +9,30 @@
/* INCLUDES *********************************************************/ /* INCLUDES *********************************************************/
#include "precomp.h" #include "precomp.h"
#include "palette.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
void
RegisterWclPal()
{
WNDCLASSEX wclPal;
/* initializing and registering the window class used for the palette window */
wclPal.hInstance = hProgInstance;
wclPal.lpszClassName = _T("Palette");
wclPal.lpfnWndProc = PalWinProc;
wclPal.style = CS_DBLCLKS;
wclPal.cbSize = sizeof(WNDCLASSEX);
wclPal.hIcon = NULL;
wclPal.hIconSm = NULL;
wclPal.hCursor = LoadCursor(NULL, IDC_ARROW);
wclPal.lpszMenuName = NULL;
wclPal.cbClsExtra = 0;
wclPal.cbWndExtra = 0;
wclPal.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclPal);
}
LRESULT CALLBACK LRESULT CALLBACK
PalWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) PalWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {

View file

@ -6,4 +6,6 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
void RegisterWclPal();
LRESULT CALLBACK PalWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK PalWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,142 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: scrollbox.c
* PURPOSE: Functionality surrounding the scroll box window class
* PROGRAMMERS: Benedikt Freisen
*/
/* INCLUDES *********************************************************/
#include "precomp.h"
#include "scrollbox.h"
/* FUNCTIONS ********************************************************/
void
RegisterWclScrollbox()
{
WNDCLASSEX wclScroll;
/* initializing and registering the window class used for the scroll box */
wclScroll.hInstance = hProgInstance;
wclScroll.lpszClassName = _T("Scrollbox");
wclScroll.lpfnWndProc = ScrollboxWinProc;
wclScroll.style = 0;
wclScroll.cbSize = sizeof(WNDCLASSEX);
wclScroll.hIcon = NULL;
wclScroll.hIconSm = NULL;
wclScroll.hCursor = LoadCursor(NULL, IDC_ARROW);
wclScroll.lpszMenuName = NULL;
wclScroll.cbClsExtra = 0;
wclScroll.cbWndExtra = 0;
wclScroll.hbrBackground = GetSysColorBrush(COLOR_APPWORKSPACE);
RegisterClassEx (&wclScroll);
}
void
UpdateScrollbox()
{
RECT clientRectScrollbox;
RECT clientRectImageArea;
SCROLLINFO si;
GetClientRect(hScrollbox, &clientRectScrollbox);
GetClientRect(hImageArea, &clientRectImageArea);
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_PAGE | SIF_RANGE;
si.nMax = clientRectImageArea.right + 6 - 1;
si.nMin = 0;
si.nPage = clientRectScrollbox.right;
SetScrollInfo(hScrollbox, SB_HORZ, &si, TRUE);
GetClientRect(hScrollbox, &clientRectScrollbox);
si.nMax = clientRectImageArea.bottom + 6 - 1;
si.nPage = clientRectScrollbox.bottom;
SetScrollInfo(hScrollbox, SB_VERT, &si, TRUE);
MoveWindow(hScrlClient,
-GetScrollPos(hScrollbox, SB_HORZ), -GetScrollPos(hScrollbox, SB_VERT),
max(clientRectImageArea.right + 6, clientRectScrollbox.right),
max(clientRectImageArea.bottom + 6, clientRectScrollbox.bottom), TRUE);
}
LRESULT CALLBACK
ScrollboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_SIZE:
if (hwnd == hScrollbox)
{
UpdateScrollbox();
}
break;
case WM_HSCROLL:
if (hwnd == hScrollbox)
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
GetScrollInfo(hScrollbox, SB_HORZ, &si);
switch (LOWORD(wParam))
{
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
si.nPos = HIWORD(wParam);
break;
case SB_LINELEFT:
si.nPos -= 5;
break;
case SB_LINERIGHT:
si.nPos += 5;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
}
SetScrollInfo(hScrollbox, SB_HORZ, &si, TRUE);
MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ),
-GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6,
imgYRes * zoom / 1000 + 6, TRUE);
}
break;
case WM_VSCROLL:
if (hwnd == hScrollbox)
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
GetScrollInfo(hScrollbox, SB_VERT, &si);
switch (LOWORD(wParam))
{
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
si.nPos = HIWORD(wParam);
break;
case SB_LINEUP:
si.nPos -= 5;
break;
case SB_LINEDOWN:
si.nPos += 5;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
}
SetScrollInfo(hScrollbox, SB_VERT, &si, TRUE);
MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ),
-GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6,
imgYRes * zoom / 1000 + 6, TRUE);
}
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}

View file

@ -0,0 +1,13 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: scrollbox.h
* PURPOSE: Functionality surrounding the scroll box window class
* PROGRAMMERS: Benedikt Freisen
*/
void RegisterWclScrollbox();
void UpdateScrollbox();
LRESULT CALLBACK ScrollboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -38,6 +38,26 @@ POINTS pos;
POINTS frac; POINTS frac;
POINT delta; POINT delta;
void
RegisterWclSelection()
{
WNDCLASSEX wclSelection;
/* initializing and registering the window class for the selection frame */
wclSelection.hInstance = hProgInstance;
wclSelection.lpszClassName = _T("Selection");
wclSelection.lpfnWndProc = SelectionWinProc;
wclSelection.style = CS_DBLCLKS;
wclSelection.cbSize = sizeof(WNDCLASSEX);
wclSelection.hIcon = NULL;
wclSelection.hIconSm = NULL;
wclSelection.hCursor = LoadCursor(NULL, IDC_SIZEALL);
wclSelection.lpszMenuName = NULL;
wclSelection.cbClsExtra = 0;
wclSelection.cbWndExtra = 0;
wclSelection.hbrBackground = NULL;
RegisterClassEx (&wclSelection);
}
BOOL BOOL
ColorKeyedMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, HBITMAP hbmMask, int xMask, int yMask, DWORD dwRop, COLORREF keyColor) ColorKeyedMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, HBITMAP hbmMask, int xMask, int yMask, DWORD dwRop, COLORREF keyColor)
{ {

View file

@ -6,6 +6,8 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
void RegisterWclSelection();
void ForceRefreshSelectionContents(); void ForceRefreshSelectionContents();
LRESULT CALLBACK SelectionWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK SelectionWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -9,6 +9,7 @@
/* INCLUDES *********************************************************/ /* INCLUDES *********************************************************/
#include "precomp.h" #include "precomp.h"
#include "sizebox.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
@ -16,6 +17,26 @@ BOOL resizing = FALSE;
short xOrig; short xOrig;
short yOrig; short yOrig;
void
RegisterWclSizebox()
{
WNDCLASSEX wclSizebox;
/* initializing and registering the window class for the size boxes */
wclSizebox.hInstance = hProgInstance;
wclSizebox.lpszClassName = _T("Sizebox");
wclSizebox.lpfnWndProc = SizeboxWinProc;
wclSizebox.style = CS_DBLCLKS;
wclSizebox.cbSize = sizeof(WNDCLASSEX);
wclSizebox.hIcon = NULL;
wclSizebox.hIconSm = NULL;
wclSizebox.hCursor = LoadCursor(NULL, IDC_ARROW);
wclSizebox.lpszMenuName = NULL;
wclSizebox.cbClsExtra = 0;
wclSizebox.cbWndExtra = 0;
wclSizebox.hbrBackground = GetSysColorBrush(COLOR_HIGHLIGHT);
RegisterClassEx (&wclSizebox);
}
LRESULT CALLBACK LRESULT CALLBACK
SizeboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) SizeboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {

View file

@ -6,4 +6,6 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
void RegisterWclSizebox();
LRESULT CALLBACK SizeboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK SizeboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -9,9 +9,30 @@
/* INCLUDES *********************************************************/ /* INCLUDES *********************************************************/
#include "precomp.h" #include "precomp.h"
#include "textedit.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
void
RegisterWclTextEdit()
{
WNDCLASSEX wclTextEdit;
/* initializing and registering the window class used for the text editor */
wclTextEdit.hInstance = hProgInstance;
wclTextEdit.lpszClassName = _T("TextEdit");
wclTextEdit.lpfnWndProc = TextEditWinProc;
wclTextEdit.style = CS_DBLCLKS;
wclTextEdit.cbSize = sizeof(WNDCLASSEX);
wclTextEdit.hIcon = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON));
wclTextEdit.hIconSm = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON));
wclTextEdit.hCursor = LoadCursor(NULL, IDC_ARROW);
wclTextEdit.lpszMenuName = NULL;
wclTextEdit.cbClsExtra = 0;
wclTextEdit.cbWndExtra = 0;
wclTextEdit.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclTextEdit);
}
LRESULT CALLBACK LRESULT CALLBACK
TextEditWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) TextEditWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {

View file

@ -6,4 +6,6 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
void RegisterWclTextEdit();
LRESULT CALLBACK TextEditWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK TextEditWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -9,11 +9,31 @@
/* INCLUDES *********************************************************/ /* INCLUDES *********************************************************/
#include "precomp.h" #include "precomp.h"
#include "toolsettings.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
extern void zoomTo(int, int, int); extern void zoomTo(int, int, int);
void RegisterWclSettings()
{
WNDCLASSEX wclSettings;
/* initializing and registering the window class for the settings window */
wclSettings.hInstance = hProgInstance;
wclSettings.lpszClassName = _T("ToolSettings");
wclSettings.lpfnWndProc = SettingsWinProc;
wclSettings.style = CS_DBLCLKS;
wclSettings.cbSize = sizeof(WNDCLASSEX);
wclSettings.hIcon = NULL;
wclSettings.hIconSm = NULL;
wclSettings.hCursor = LoadCursor(NULL, IDC_ARROW);
wclSettings.lpszMenuName = NULL;
wclSettings.cbClsExtra = 0;
wclSettings.cbWndExtra = 0;
wclSettings.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclSettings);
}
LRESULT CALLBACK LRESULT CALLBACK
SettingsWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) SettingsWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {

View file

@ -6,4 +6,6 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
void RegisterWclSettings();
LRESULT CALLBACK SettingsWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK SettingsWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -11,11 +11,33 @@
#include "precomp.h" #include "precomp.h"
#include "winproc.h"
#include "dialogs.h" #include "dialogs.h"
#include "registry.h" #include "registry.h"
#include "scrollbox.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
void
RegisterWclMain()
{
WNDCLASSEX wclMain;
/* initializing and registering the window class used for the main window */
wclMain.hInstance = hProgInstance;
wclMain.lpszClassName = _T("MainWindow");
wclMain.lpfnWndProc = MainWindowProcedure;
wclMain.style = CS_DBLCLKS;
wclMain.cbSize = sizeof(WNDCLASSEX);
wclMain.hIcon = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON));
wclMain.hIconSm = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON));
wclMain.hCursor = LoadCursor(NULL, IDC_ARROW);
wclMain.lpszMenuName = NULL;
wclMain.cbClsExtra = 0;
wclMain.cbWndExtra = 0;
wclMain.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclMain);
}
void void
selectTool(int tool) selectTool(int tool)
{ {
@ -212,7 +234,7 @@ InsertSelectionFromHBITMAP(HBITMAP bitmap, HWND window)
BOOL drawing; BOOL drawing;
LRESULT CALLBACK LRESULT CALLBACK
WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {
switch (message) /* handle the messages */ switch (message) /* handle the messages */
{ {
@ -365,93 +387,9 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
imgXRes * zoom / 1000 + 3, imgXRes * zoom / 1000 + 3,
imgYRes * zoom / 1000 + 3, 3, 3, TRUE); imgYRes * zoom / 1000 + 3, 3, 3, TRUE);
} }
if ((hwnd == hImageArea) || (hwnd == hScrollbox)) if (hwnd == hImageArea)
{ {
RECT clientRectScrollbox; UpdateScrollbox();
RECT clientRectImageArea;
SCROLLINFO si;
GetClientRect(hScrollbox, &clientRectScrollbox);
GetClientRect(hImageArea, &clientRectImageArea);
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_PAGE | SIF_RANGE;
si.nMax = clientRectImageArea.right + 6 - 1;
si.nMin = 0;
si.nPage = clientRectScrollbox.right;
SetScrollInfo(hScrollbox, SB_HORZ, &si, TRUE);
GetClientRect(hScrollbox, &clientRectScrollbox);
si.nMax = clientRectImageArea.bottom + 6 - 1;
si.nPage = clientRectScrollbox.bottom;
SetScrollInfo(hScrollbox, SB_VERT, &si, TRUE);
MoveWindow(hScrlClient,
-GetScrollPos(hScrollbox, SB_HORZ), -GetScrollPos(hScrollbox, SB_VERT),
max(clientRectImageArea.right + 6, clientRectScrollbox.right),
max(clientRectImageArea.bottom + 6, clientRectScrollbox.bottom), TRUE);
}
break;
case WM_HSCROLL:
if (hwnd == hScrollbox)
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
GetScrollInfo(hScrollbox, SB_HORZ, &si);
switch (LOWORD(wParam))
{
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
si.nPos = HIWORD(wParam);
break;
case SB_LINELEFT:
si.nPos -= 5;
break;
case SB_LINERIGHT:
si.nPos += 5;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
}
SetScrollInfo(hScrollbox, SB_HORZ, &si, TRUE);
MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ),
-GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6,
imgYRes * zoom / 1000 + 6, TRUE);
}
break;
case WM_VSCROLL:
if (hwnd == hScrollbox)
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
GetScrollInfo(hScrollbox, SB_VERT, &si);
switch (LOWORD(wParam))
{
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
si.nPos = HIWORD(wParam);
break;
case SB_LINEUP:
si.nPos -= 5;
break;
case SB_LINEDOWN:
si.nPos += 5;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
}
SetScrollInfo(hScrollbox, SB_VERT, &si, TRUE);
MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ),
-GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6,
imgYRes * zoom / 1000 + 6, TRUE);
} }
break; break;

View file

@ -7,4 +7,6 @@
* PROGRAMMERS: Benedikt Freisen * PROGRAMMERS: Benedikt Freisen
*/ */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); void RegisterWclMain();
LRESULT CALLBACK MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);