[CRT] Remove useless #undef abort from process.h
[reactos.git] / base / applications / rapps / winmain.cpp
1 /*
2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Main program
5 * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
6 * Copyright 2015 Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
7 * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
8 */
9 #include "rapps.h"
10 #include "unattended.h"
11 #include "winmain.h"
12 #include <atlcom.h>
13 #include <gdiplus.h>
14 #include <conutils.h>
15
16 LPCWSTR szWindowClass = L"ROSAPPMGR";
17
18 HWND hMainWnd;
19 HINSTANCE hInst;
20 SETTINGS_INFO SettingsInfo;
21
22 class CRAppsModule : public CComModule
23 {
24 public:
25 };
26
27 BEGIN_OBJECT_MAP(ObjectMap)
28 END_OBJECT_MAP()
29
30 CRAppsModule gModule;
31 CAtlWinModule gWinModule;
32
33 Gdiplus::GdiplusStartupInput gdiplusStartupInput;
34 ULONG_PTR gdiplusToken;
35
36
37 static VOID InitializeAtlModule(HINSTANCE hInstance, BOOL bInitialize)
38 {
39 if (bInitialize)
40 {
41 gModule.Init(ObjectMap, hInstance, NULL);
42 }
43 else
44 {
45 gModule.Term();
46 }
47 }
48
49 VOID InitializeGDIPlus(BOOL bInitialize)
50 {
51 if (bInitialize)
52 {
53 Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
54 }
55 else
56 {
57 Gdiplus::GdiplusShutdown(gdiplusToken);
58 }
59 }
60
61 INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nShowCmd)
62 {
63 BOOL bIsFirstLaunch;
64
65 InitializeAtlModule(hInstance, TRUE);
66 InitializeGDIPlus(TRUE);
67
68 if (GetUserDefaultUILanguage() == MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT))
69 {
70 SetProcessDefaultLayout(LAYOUT_RTL);
71 }
72
73 hInst = hInstance;
74
75 bIsFirstLaunch = !LoadSettings(&SettingsInfo);
76 if (bIsFirstLaunch)
77 {
78 FillDefaultSettings(&SettingsInfo);
79 }
80
81 InitLogs();
82 InitCommonControls();
83
84 // parse cmd-line and perform the corresponding operation
85 BOOL bSuccess = ParseCmdAndExecute(GetCommandLineW(), bIsFirstLaunch, SW_SHOWNORMAL);
86
87 InitializeGDIPlus(FALSE);
88 InitializeAtlModule(GetModuleHandle(NULL), FALSE);
89
90 return bSuccess ? 0 : 1;
91 }