ReactOS 0.4.15-dev-5865-g640e228
main.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: base/applications/mspaint/main.cpp
5 * PURPOSE: Initializing everything
6 * PROGRAMMERS: Benedikt Freisen
7 */
8
9#include "precomp.h"
10
11/* FUNCTIONS ********************************************************/
12
15
17
19
21
23
25BOOL askBeforeEnlarging = FALSE; // TODO: initialize from registry
26
33
35
40int fileHPPM = 2834;
41int fileVPPM = 2834;
43
46
57
58// get file name extension from filter string
59static BOOL
61{
62 LPTSTR pchExt = pExt;
63 *pchExt = 0;
64
65 DWORD nIndex = 1;
66 for (LPCTSTR pch = pOFN->lpstrFilter; *pch; ++nIndex)
67 {
68 pch += lstrlen(pch) + 1;
69 if (pOFN->nFilterIndex == nIndex)
70 {
71 for (++pch; *pch && *pch != _T(';'); ++pch)
72 {
73 *pchExt++ = *pch;
74 }
75 *pchExt = 0;
76 CharLower(pExt);
77 return TRUE;
78 }
79 pch += lstrlen(pch) + 1;
80 }
81 return FALSE;
82}
83
84// Hook procedure for OPENFILENAME to change the file name extension
85static UINT_PTR APIENTRY
87{
88 HWND hParent;
89 OFNOTIFY *pon;
90 switch (uMsg)
91 {
92 case WM_NOTIFY:
93 pon = (OFNOTIFY *)lParam;
94 if (pon->hdr.code == CDN_TYPECHANGE)
95 {
96 hParent = GetParent(hwnd);
101 lstrcpyn(pon->lpOFN->lpstrFile, Path, pon->lpOFN->nMaxFile);
102 }
103 break;
104 }
105 return 0;
106}
107
108/* entry point */
109
110int WINAPI
111_tWinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPTSTR lpszArgument, INT nCmdShow)
112{
113 HWND hwnd; /* This is the handle for our window */
114 MSG messages; /* Here messages to the application are saved */
115
116 HMENU menu;
117 HACCEL haccel;
118
119 TCHAR sfnFilename[1000];
120 TCHAR sfnFiletitle[256];
121 TCHAR ofnFilename[1000];
122 TCHAR ofnFiletitle[256];
123 TCHAR miniaturetitle[100];
124 static COLORREF custColors[16] = {
125 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
126 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff
127 };
128
129#ifdef _DEBUG
130 /* Report any memory leaks on exit */
132#endif
133
134 hProgInstance = hThisInstance;
135
136 /* initialize common controls library */
138 iccx.dwSize = sizeof(iccx);
141
143 CPath pathFileName(filepathname);
144 pathFileName.StripPath();
145 CString strTitle;
146 strTitle.Format(IDS_WINDOWTITLE, (LPCTSTR)pathFileName);
147 LoadString(hThisInstance, IDS_MINIATURETITLE, miniaturetitle, _countof(miniaturetitle));
148
149 /* load settings from registry */
150 registrySettings.Load(nCmdShow);
153
154 /* create main window */
156 hwnd = mainWindow.Create(HWND_DESKTOP, mainWindowPos, strTitle, WS_OVERLAPPEDWINDOW);
157
158 RECT fullscreenWindowPos = {0, 0, 100, 100};
159 fullscreenWindow.Create(HWND_DESKTOP, fullscreenWindowPos, NULL, WS_POPUPWINDOW | WS_MAXIMIZE);
160
164 miniature.Create(hwnd, miniaturePos, miniaturetitle,
166 miniature.ShowWindow(showMiniature ? SW_SHOW : SW_HIDE);
167
168 /* loading and setting the window menu from resource */
169 menu = LoadMenu(hThisInstance, MAKEINTRESOURCE(ID_MENU));
170 SetMenu(hwnd, menu);
171 haccel = LoadAccelerators(hThisInstance, MAKEINTRESOURCE(800));
172
173 /* Create ToolBox */
175
176 /* creating the palette child window */
177 RECT paletteWindowPos = {56, 9, 56 + 255, 9 + 32};
178 paletteWindow.Create(hwnd, paletteWindowPos, NULL, WS_CHILD, WS_EX_STATICEDGE);
181
182 // creating the canvas
183 RECT canvasWindowPos = {0, 0, 0 + 500, 0 + 500};
184 canvasWindow.Create(hwnd, canvasWindowPos, NULL,
186
187 /* creating the status bar */
188 hStatusBar =
190 NULL, hThisInstance, NULL);
194
195 // Creating the window inside the canvas
197 imageArea.Create(canvasWindow.m_hWnd, imageAreaPos, NULL, WS_CHILD | WS_VISIBLE);
198
199 /* create selection window (initially hidden) */
200 RECT selectionWindowPos = {350, 0, 350 + 100, 0 + 100};
201 selectionWindow.Create(imageArea.m_hWnd, selectionWindowPos, NULL, WS_CHILD | BS_OWNERDRAW);
202
203 if (__argc >= 2)
204 {
206 }
207
209
210 /* initializing the CHOOSECOLOR structure for use with ChooseColor */
214 choosecolor.rgbResult = 0x00ffffff;
215 choosecolor.lpCustColors = custColors;
216
217 /* initializing the OPENFILENAME structure for use with GetOpenFileName and GetSaveFileName */
218 ofnFilename[0] = 0;
219 CString strImporters;
220 CSimpleArray<GUID> aguidFileTypesI;
221 CString strAllPictureFiles;
222 strAllPictureFiles.LoadString(hThisInstance, IDS_ALLPICTUREFILES);
223 CImage::GetImporterFilterString(strImporters, aguidFileTypesI, strAllPictureFiles, CImage::excludeDefaultLoad, _T('\0'));
224// CAtlStringW strAllFiles;
225// strAllFiles.LoadString(hThisInstance, IDS_ALLFILES);
226// strImporters = strAllFiles + CAtlStringW(_T("|*.*|")).Replace('|', '\0') + strImporters;
227 ZeroMemory(&ofn, sizeof(OPENFILENAME));
228 ofn.lStructSize = sizeof(OPENFILENAME);
230 ofn.hInstance = hThisInstance;
231 ofn.lpstrFilter = strImporters;
232 ofn.lpstrFile = ofnFilename;
233 ofn.nMaxFile = _countof(ofnFilename);
234 ofn.lpstrFileTitle = ofnFiletitle;
235 ofn.nMaxFileTitle = _countof(ofnFiletitle);
237 ofn.lpstrDefExt = L"png";
238
239 CopyMemory(sfnFilename, filepathname, sizeof(filepathname));
240 CString strExporters;
241 CSimpleArray<GUID> aguidFileTypesE;
242 CImage::GetExporterFilterString(strExporters, aguidFileTypesE, NULL, CImage::excludeDefaultSave, _T('\0'));
243 ZeroMemory(&sfn, sizeof(OPENFILENAME));
244 sfn.lStructSize = sizeof(OPENFILENAME);
246 sfn.hInstance = hThisInstance;
247 sfn.lpstrFilter = strExporters;
248 sfn.lpstrFile = sfnFilename;
249 sfn.nMaxFile = _countof(sfnFilename);
250 sfn.lpstrFileTitle = sfnFiletitle;
251 sfn.nMaxFileTitle = _countof(sfnFiletitle);
254 sfn.lpstrDefExt = L"png";
255 // Choose PNG
256 for (INT i = 0; i < aguidFileTypesE.GetSize(); ++i)
257 {
258 if (aguidFileTypesE[i] == Gdiplus::ImageFormatPNG)
259 {
260 sfn.nFilterIndex = i + 1;
261 break;
262 }
263 }
264
265 /* placing the size boxes around the image */
266 imageArea.SendMessage(WM_SIZE, 0, 0);
267
268 /* Make the window visible on the screen */
270
271 /* inform the system, that the main window accepts dropped files */
273
274 /* Run the message loop. It will run until GetMessage() returns 0 */
275 while (GetMessage(&messages, NULL, 0, 0))
276 {
277 if (fontsDialog.IsWindow() && IsDialogMessage(fontsDialog, &messages))
278 continue;
279
280 if (TranslateAccelerator(hwnd, haccel, &messages))
281 continue;
282
283 /* Translate virtual-key messages into character messages */
285 /* Send message to WindowProcedure */
287 }
288
289 /* write back settings to registry */
294
295 /* The program return-value is 0 - The value that PostQuitMessage() gave */
296 return messages.wParam;
297}
PRTL_UNICODE_STRING_BUFFER Path
#define GRIP_SIZE
Definition: common.h:13
CFontsDialog fontsDialog
Definition: dialogs.cpp:22
ToolsModel toolsModel
Definition: main.cpp:16
int fileHPPM
Definition: main.cpp:40
CMiniatureWindow miniature
Definition: main.cpp:49
CSelectionWindow selectionWindow
Definition: main.cpp:54
CHOOSECOLOR choosecolor
Definition: main.cpp:28
BOOL imageSaved
Definition: main.cpp:38
static BOOL FileExtFromFilter(LPTSTR pExt, OPENFILENAME *pOFN)
Definition: main.cpp:60
int fileSize
Definition: main.cpp:39
ImageModel imageModel
Definition: main.cpp:24
int fileVPPM
Definition: main.cpp:41
RegistrySettings registrySettings
Definition: main.cpp:22
CPaletteWindow paletteWindow
Definition: main.cpp:52
HICON hTranspIcon
Definition: main.cpp:32
CFullscreenWindow fullscreenWindow
Definition: main.cpp:48
HINSTANCE hProgInstance
Definition: main.cpp:34
SelectionModel selectionModel
Definition: main.cpp:18
static UINT_PTR APIENTRY OFNHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: main.cpp:86
CToolBox toolBoxContainer
Definition: main.cpp:50
BOOL askBeforeEnlarging
Definition: main.cpp:25
CImgAreaWindow imageArea
Definition: main.cpp:55
TCHAR filepathname[1000]
Definition: main.cpp:36
POINT start
Definition: main.cpp:13
CCanvasWindow canvasWindow
Definition: main.cpp:53
BOOL showMiniature
Definition: main.cpp:45
OPENFILENAME ofn
Definition: main.cpp:29
OPENFILENAME sfn
Definition: main.cpp:30
BOOL showGrid
Definition: main.cpp:44
CMainWindow mainWindow
Definition: main.cpp:47
HICON hNontranspIcon
Definition: main.cpp:31
POINT last
Definition: main.cpp:14
CTextEditWindow textEditWindow
Definition: main.cpp:56
PaletteModel paletteModel
Definition: main.cpp:20
CToolSettingsWindow toolSettingsWindow
Definition: main.cpp:51
BOOL isAFile
Definition: main.cpp:37
SYSTEMTIME fileTime
Definition: main.cpp:42
HWND hStatusBar
Definition: main.cpp:27
#define ID_MENU
Definition: resource.h:32
#define IDS_DEFAULTFILENAME
Definition: resource.h:186
#define IDS_MINIATURETITLE
Definition: resource.h:187
#define IDS_WINDOWTITLE
Definition: resource.h:181
#define IDS_ALLPICTUREFILES
Definition: resource.h:207
static HRESULT GetImporterFilterString(CSimpleString &strImporters, CSimpleArray< GUID > &aguidFileTypes, LPCTSTR pszAllFilesDescription=NULL, DWORD dwExclude=excludeDefaultLoad, TCHAR chSeparator=TEXT('|'))
Definition: atlimage.h:787
static HRESULT GetExporterFilterString(CSimpleString &strExporters, CSimpleArray< GUID > &aguidFileTypes, LPCTSTR pszAllFilesDescription=NULL, DWORD dwExclude=excludeDefaultSave, TCHAR chSeparator=TEXT('|'))
Definition: atlimage.h:801
@ excludeDefaultLoad
Definition: atlimage.h:712
@ excludeDefaultSave
Definition: atlimage.h:713
void StripPath()
Definition: atlpath.h:348
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:591
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
HWND Create()
Definition: gui.cpp:676
BOOL DoCreate(HWND hwndParent)
Definition: toolbox.cpp:16
int GetWidth() const
Definition: history.cpp:215
void Crop(int nWidth, int nHeight, int nOffsetX=0, int nOffsetY=0)
Definition: history.cpp:131
int GetHeight() const
Definition: history.cpp:220
void ClearHistory(void)
Definition: history.cpp:109
DWORD ThumbXPos
Definition: registry.h:27
DWORD BMPWidth
Definition: registry.h:20
DWORD ShowPalette
Definition: registry.h:44
DWORD ThumbYPos
Definition: registry.h:28
DWORD ThumbWidth
Definition: registry.h:26
DWORD ShowThumbnail
Definition: registry.h:23
DWORD ShowStatusBar
Definition: registry.h:43
WINDOWPLACEMENT WindowPlacement
Definition: registry.h:30
void Load(INT nCmdShow)
Definition: registry.cpp:90
DWORD BMPHeight
Definition: registry.h:19
DWORD ThumbHeight
Definition: registry.h:25
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define CDM_SETCONTROLTEXT
Definition: commdlg.h:47
#define OFN_EXPLORER
Definition: commdlg.h:104
CHOOSECOLORA CHOOSECOLOR
Definition: commdlg.h:654
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
#define CDM_GETFILEPATH
Definition: commdlg.h:44
#define CDN_TYPECHANGE
Definition: commdlg.h:39
OPENFILENAMEA OPENFILENAME
Definition: commdlg.h:657
#define _CRTDBG_LEAK_CHECK_DF
Definition: crtdbg.h:52
#define _CrtSetDbgFlag(f)
Definition: crtdbg.h:240
#define _CRTDBG_ALLOC_MEM_DF
Definition: crtdbg.h:47
HBITMAP DoLoadImageFile(HWND hwnd, LPCTSTR name, BOOL fIsMainFile)
Definition: dib.cpp:159
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define APIENTRY
Definition: api.h:79
#define MAX_PATH
Definition: compat.h:34
void WINAPI DragAcceptFiles(HWND hWnd, BOOL b)
Definition: shellole.c:522
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_CRTIMP int __argc
Definition: getargs.c:21
#define _tWinMain
Definition: tchar.h:498
#define __targv
Definition: tchar.h:504
#define pch(ap)
Definition: match.c:418
static HICON
Definition: imagelist.c:84
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define WS_CHILD
Definition: pedump.c:617
#define WS_CAPTION
Definition: pedump.c:624
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_OVERLAPPED
Definition: pedump.c:615
#define WS_MAXIMIZE
Definition: pedump.c:623
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_GROUP
Definition: pedump.c:633
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define BS_OWNERDRAW
Definition: pedump.c:661
#define WS_HSCROLL
Definition: pedump.c:628
#define WS_POPUPWINDOW
Definition: pedump.c:638
#define WS_THICKFRAME
Definition: pedump.c:630
#define ICC_USEREX_CLASSES
Definition: commctrl.h:68
#define ICC_STANDARD_CLASSES
Definition: commctrl.h:73
#define SB_SETMINHEIGHT
Definition: commctrl.h:1957
#define SBARS_SIZEGRIP
Definition: commctrl.h:1923
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define STATUSCLASSNAME
Definition: commctrl.h:1939
#define WM_NOTIFY
Definition: richedit.h:61
#define PathFindExtension
Definition: shlwapi.h:907
#define PathFindFileName
Definition: shlwapi.h:911
#define _countof(array)
Definition: sndvol32.h:68
NMHDR hdr
Definition: commdlg.h:406
LPOPENFILENAMEA lpOFN
Definition: commdlg.h:407
RECT rcNormalPosition
Definition: winuser.h:3285
COLORREF rgbResult
Definition: commdlg.h:242
HWND hwndOwner
Definition: commdlg.h:240
COLORREF * lpCustColors
Definition: commdlg.h:243
DWORD lStructSize
Definition: commdlg.h:239
UINT code
Definition: winuser.h:3149
LPCSTR lpstrDefExt
Definition: commdlg.h:345
LPSTR lpstrFileTitle
Definition: commdlg.h:338
DWORD nFilterIndex
Definition: commdlg.h:335
HWND hwndOwner
Definition: commdlg.h:330
HINSTANCE hInstance
Definition: commdlg.h:331
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD nMaxFileTitle
Definition: commdlg.h:339
DWORD Flags
Definition: commdlg.h:342
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347
DWORD lStructSize
Definition: commdlg.h:329
LPCSTR lpstrFilter
Definition: commdlg.h:332
DWORD nMaxFile
Definition: commdlg.h:337
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
#define _T(x)
Definition: vfdio.h:22
#define lstrcpyn
Definition: winbase.h:3746
#define ZeroMemory
Definition: winbase.h:1670
#define CopyMemory
Definition: winbase.h:1668
#define lstrlen
Definition: winbase.h:3747
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
#define CreateWindowEx
Definition: winuser.h:5745
#define WS_EX_STATICEDGE
Definition: winuser.h:403
#define SW_HIDE
Definition: winuser.h:762
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define IsDialogMessage
Definition: winuser.h:5799
#define CharLower
Definition: winuser.h:5727
#define WM_SIZE
Definition: winuser.h:1601
#define SW_SHOWNOACTIVATE
Definition: winuser.h:768
#define WS_EX_PALETTEWINDOW
Definition: winuser.h:399
#define HWND_DESKTOP
Definition: winuser.h:1199
#define GetMessage
Definition: winuser.h:5780
#define SendMessage
Definition: winuser.h:5833
#define LoadMenu
Definition: winuser.h:5807
HWND WINAPI GetParent(_In_ HWND)
#define LoadString
Definition: winuser.h:5809
#define SW_SHOW
Definition: winuser.h:769
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define DispatchMessage
Definition: winuser.h:5755
#define TranslateAccelerator
Definition: winuser.h:5850
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define LoadAccelerators
Definition: winuser.h:5800
char TCHAR
Definition: xmlstorage.h:189
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192