1*f6dc9357SAndroid Build Coastguard Worker // FM.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyWindows.h"
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #if defined(__MINGW32__) || defined(__MINGW64__)
8*f6dc9357SAndroid Build Coastguard Worker #include <shlwapi.h>
9*f6dc9357SAndroid Build Coastguard Worker #else
10*f6dc9357SAndroid Build Coastguard Worker #include <Shlwapi.h>
11*f6dc9357SAndroid Build Coastguard Worker #endif
12*f6dc9357SAndroid Build Coastguard Worker
13*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/Compiler.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/Alloc.h"
15*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
16*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/DllSecur.h"
17*f6dc9357SAndroid Build Coastguard Worker #endif
18*f6dc9357SAndroid Build Coastguard Worker
19*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
20*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringToInt.h"
21*f6dc9357SAndroid Build Coastguard Worker
22*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ErrorMsg.h"
23*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/MemoryLock.h"
24*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/NtCheck.h"
25*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/System.h"
26*f6dc9357SAndroid Build Coastguard Worker
27*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
28*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/SecurityUtils.h"
29*f6dc9357SAndroid Build Coastguard Worker #endif
30*f6dc9357SAndroid Build Coastguard Worker
31*f6dc9357SAndroid Build Coastguard Worker #include "../GUI/ExtractRes.h"
32*f6dc9357SAndroid Build Coastguard Worker
33*f6dc9357SAndroid Build Coastguard Worker #include "resource.h"
34*f6dc9357SAndroid Build Coastguard Worker
35*f6dc9357SAndroid Build Coastguard Worker #include "App.h"
36*f6dc9357SAndroid Build Coastguard Worker #include "FormatUtils.h"
37*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
38*f6dc9357SAndroid Build Coastguard Worker #include "MyLoadMenu.h"
39*f6dc9357SAndroid Build Coastguard Worker #include "Panel.h"
40*f6dc9357SAndroid Build Coastguard Worker #include "RegistryUtils.h"
41*f6dc9357SAndroid Build Coastguard Worker #include "StringUtils.h"
42*f6dc9357SAndroid Build Coastguard Worker #include "ViewSettings.h"
43*f6dc9357SAndroid Build Coastguard Worker
44*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
45*f6dc9357SAndroid Build Coastguard Worker using namespace NFile;
46*f6dc9357SAndroid Build Coastguard Worker using namespace NFind;
47*f6dc9357SAndroid Build Coastguard Worker
48*f6dc9357SAndroid Build Coastguard Worker // #define MAX_LOADSTRING 100
49*f6dc9357SAndroid Build Coastguard Worker
50*f6dc9357SAndroid Build Coastguard Worker extern
51*f6dc9357SAndroid Build Coastguard Worker bool g_DisableUserQuestions;
52*f6dc9357SAndroid Build Coastguard Worker bool g_DisableUserQuestions;
53*f6dc9357SAndroid Build Coastguard Worker
54*f6dc9357SAndroid Build Coastguard Worker extern
55*f6dc9357SAndroid Build Coastguard Worker bool g_RAM_Size_Defined;
56*f6dc9357SAndroid Build Coastguard Worker bool g_RAM_Size_Defined;
57*f6dc9357SAndroid Build Coastguard Worker
58*f6dc9357SAndroid Build Coastguard Worker extern
59*f6dc9357SAndroid Build Coastguard Worker bool g_LargePagesMode;
60*f6dc9357SAndroid Build Coastguard Worker bool g_LargePagesMode = false;
61*f6dc9357SAndroid Build Coastguard Worker // static bool g_OpenArchive = false;
62*f6dc9357SAndroid Build Coastguard Worker
63*f6dc9357SAndroid Build Coastguard Worker static bool g_Maximized = false;
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard Worker extern
66*f6dc9357SAndroid Build Coastguard Worker size_t g_RAM_Size;
67*f6dc9357SAndroid Build Coastguard Worker size_t g_RAM_Size;
68*f6dc9357SAndroid Build Coastguard Worker
69*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
70*f6dc9357SAndroid Build Coastguard Worker extern
71*f6dc9357SAndroid Build Coastguard Worker HINSTANCE g_hInstance;
72*f6dc9357SAndroid Build Coastguard Worker HINSTANCE g_hInstance;
73*f6dc9357SAndroid Build Coastguard Worker #endif
74*f6dc9357SAndroid Build Coastguard Worker
75*f6dc9357SAndroid Build Coastguard Worker HWND g_HWND;
76*f6dc9357SAndroid Build Coastguard Worker
77*f6dc9357SAndroid Build Coastguard Worker static UString g_MainPath;
78*f6dc9357SAndroid Build Coastguard Worker static UString g_ArcFormat;
79*f6dc9357SAndroid Build Coastguard Worker
80*f6dc9357SAndroid Build Coastguard Worker // HRESULT LoadGlobalCodecs();
81*f6dc9357SAndroid Build Coastguard Worker void FreeGlobalCodecs();
82*f6dc9357SAndroid Build Coastguard Worker
83*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
84*f6dc9357SAndroid Build Coastguard Worker
85*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_USE_DYN_ComCtl32Version
86*f6dc9357SAndroid Build Coastguard Worker Z7_DIAGNOSTIC_IGNORE_CAST_FUNCTION
87*f6dc9357SAndroid Build Coastguard Worker
88*f6dc9357SAndroid Build Coastguard Worker DWORD g_ComCtl32Version;
89*f6dc9357SAndroid Build Coastguard Worker
GetDllVersion(LPCTSTR dllName)90*f6dc9357SAndroid Build Coastguard Worker static DWORD GetDllVersion(LPCTSTR dllName)
91*f6dc9357SAndroid Build Coastguard Worker {
92*f6dc9357SAndroid Build Coastguard Worker DWORD dwVersion = 0;
93*f6dc9357SAndroid Build Coastguard Worker const HMODULE hmodule = LoadLibrary(dllName);
94*f6dc9357SAndroid Build Coastguard Worker if (hmodule)
95*f6dc9357SAndroid Build Coastguard Worker {
96*f6dc9357SAndroid Build Coastguard Worker const
97*f6dc9357SAndroid Build Coastguard Worker DLLGETVERSIONPROC f_DllGetVersion = Z7_GET_PROC_ADDRESS(
98*f6dc9357SAndroid Build Coastguard Worker DLLGETVERSIONPROC, hmodule,
99*f6dc9357SAndroid Build Coastguard Worker "DllGetVersion");
100*f6dc9357SAndroid Build Coastguard Worker if (f_DllGetVersion)
101*f6dc9357SAndroid Build Coastguard Worker {
102*f6dc9357SAndroid Build Coastguard Worker DLLVERSIONINFO dvi;
103*f6dc9357SAndroid Build Coastguard Worker ZeroMemory(&dvi, sizeof(dvi));
104*f6dc9357SAndroid Build Coastguard Worker dvi.cbSize = sizeof(dvi);
105*f6dc9357SAndroid Build Coastguard Worker const HRESULT hr = f_DllGetVersion(&dvi);
106*f6dc9357SAndroid Build Coastguard Worker if (SUCCEEDED(hr))
107*f6dc9357SAndroid Build Coastguard Worker dwVersion = (DWORD)MAKELONG(dvi.dwMinorVersion, dvi.dwMajorVersion);
108*f6dc9357SAndroid Build Coastguard Worker }
109*f6dc9357SAndroid Build Coastguard Worker FreeLibrary(hmodule);
110*f6dc9357SAndroid Build Coastguard Worker }
111*f6dc9357SAndroid Build Coastguard Worker return dwVersion;
112*f6dc9357SAndroid Build Coastguard Worker }
113*f6dc9357SAndroid Build Coastguard Worker
114*f6dc9357SAndroid Build Coastguard Worker #endif
115*f6dc9357SAndroid Build Coastguard Worker #endif
116*f6dc9357SAndroid Build Coastguard Worker
117*f6dc9357SAndroid Build Coastguard Worker bool g_IsSmallScreen = false;
118*f6dc9357SAndroid Build Coastguard Worker
119*f6dc9357SAndroid Build Coastguard Worker extern
120*f6dc9357SAndroid Build Coastguard Worker bool g_LVN_ITEMACTIVATE_Support;
121*f6dc9357SAndroid Build Coastguard Worker bool g_LVN_ITEMACTIVATE_Support = true;
122*f6dc9357SAndroid Build Coastguard Worker // LVN_ITEMACTIVATE replaces both NM_DBLCLK & NM_RETURN
123*f6dc9357SAndroid Build Coastguard Worker // Windows 2000
124*f6dc9357SAndroid Build Coastguard Worker // NT/98 + IE 3 (g_ComCtl32Version >= 4.70)
125*f6dc9357SAndroid Build Coastguard Worker
126*f6dc9357SAndroid Build Coastguard Worker
127*f6dc9357SAndroid Build Coastguard Worker static const int kNumDefaultPanels = 1;
128*f6dc9357SAndroid Build Coastguard Worker static const int kSplitterWidth = 4;
129*f6dc9357SAndroid Build Coastguard Worker static const int kSplitterRateMax = 1 << 16;
130*f6dc9357SAndroid Build Coastguard Worker static const int kPanelSizeMin = 120;
131*f6dc9357SAndroid Build Coastguard Worker
132*f6dc9357SAndroid Build Coastguard Worker
133*f6dc9357SAndroid Build Coastguard Worker class CSplitterPos
134*f6dc9357SAndroid Build Coastguard Worker {
135*f6dc9357SAndroid Build Coastguard Worker int _ratio; // 10000 is max
136*f6dc9357SAndroid Build Coastguard Worker int _pos;
137*f6dc9357SAndroid Build Coastguard Worker int _fullWidth;
SetRatioFromPos(HWND hWnd)138*f6dc9357SAndroid Build Coastguard Worker void SetRatioFromPos(HWND hWnd)
139*f6dc9357SAndroid Build Coastguard Worker { _ratio = (_pos + kSplitterWidth / 2) * kSplitterRateMax /
140*f6dc9357SAndroid Build Coastguard Worker MyMax(GetWidth(hWnd), 1); }
141*f6dc9357SAndroid Build Coastguard Worker public:
GetPos() const142*f6dc9357SAndroid Build Coastguard Worker int GetPos() const
143*f6dc9357SAndroid Build Coastguard Worker { return _pos; }
GetWidth(HWND hWnd) const144*f6dc9357SAndroid Build Coastguard Worker int GetWidth(HWND hWnd) const
145*f6dc9357SAndroid Build Coastguard Worker {
146*f6dc9357SAndroid Build Coastguard Worker RECT rect;
147*f6dc9357SAndroid Build Coastguard Worker ::GetClientRect(hWnd, &rect);
148*f6dc9357SAndroid Build Coastguard Worker return rect.right;
149*f6dc9357SAndroid Build Coastguard Worker }
SetRatio(HWND hWnd,int aRatio)150*f6dc9357SAndroid Build Coastguard Worker void SetRatio(HWND hWnd, int aRatio)
151*f6dc9357SAndroid Build Coastguard Worker {
152*f6dc9357SAndroid Build Coastguard Worker _ratio = aRatio;
153*f6dc9357SAndroid Build Coastguard Worker SetPosFromRatio(hWnd);
154*f6dc9357SAndroid Build Coastguard Worker }
SetPosPure(HWND hWnd,int pos)155*f6dc9357SAndroid Build Coastguard Worker void SetPosPure(HWND hWnd, int pos)
156*f6dc9357SAndroid Build Coastguard Worker {
157*f6dc9357SAndroid Build Coastguard Worker int posMax = GetWidth(hWnd) - kSplitterWidth;
158*f6dc9357SAndroid Build Coastguard Worker if (posMax < kPanelSizeMin * 2)
159*f6dc9357SAndroid Build Coastguard Worker pos = posMax / 2;
160*f6dc9357SAndroid Build Coastguard Worker else
161*f6dc9357SAndroid Build Coastguard Worker {
162*f6dc9357SAndroid Build Coastguard Worker if (pos > posMax - kPanelSizeMin)
163*f6dc9357SAndroid Build Coastguard Worker pos = posMax - kPanelSizeMin;
164*f6dc9357SAndroid Build Coastguard Worker else if (pos < kPanelSizeMin)
165*f6dc9357SAndroid Build Coastguard Worker pos = kPanelSizeMin;
166*f6dc9357SAndroid Build Coastguard Worker }
167*f6dc9357SAndroid Build Coastguard Worker _pos = pos;
168*f6dc9357SAndroid Build Coastguard Worker }
SetPos(HWND hWnd,int pos)169*f6dc9357SAndroid Build Coastguard Worker void SetPos(HWND hWnd, int pos)
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker _fullWidth = GetWidth(hWnd);
172*f6dc9357SAndroid Build Coastguard Worker SetPosPure(hWnd, pos);
173*f6dc9357SAndroid Build Coastguard Worker SetRatioFromPos(hWnd);
174*f6dc9357SAndroid Build Coastguard Worker }
SetPosFromRatio(HWND hWnd)175*f6dc9357SAndroid Build Coastguard Worker void SetPosFromRatio(HWND hWnd)
176*f6dc9357SAndroid Build Coastguard Worker {
177*f6dc9357SAndroid Build Coastguard Worker int fullWidth = GetWidth(hWnd);
178*f6dc9357SAndroid Build Coastguard Worker if (_fullWidth != fullWidth && fullWidth != 0)
179*f6dc9357SAndroid Build Coastguard Worker {
180*f6dc9357SAndroid Build Coastguard Worker _fullWidth = fullWidth;
181*f6dc9357SAndroid Build Coastguard Worker SetPosPure(hWnd, GetWidth(hWnd) * _ratio / kSplitterRateMax - kSplitterWidth / 2);
182*f6dc9357SAndroid Build Coastguard Worker }
183*f6dc9357SAndroid Build Coastguard Worker }
184*f6dc9357SAndroid Build Coastguard Worker };
185*f6dc9357SAndroid Build Coastguard Worker
186*f6dc9357SAndroid Build Coastguard Worker static bool g_CanChangeSplitter = false;
187*f6dc9357SAndroid Build Coastguard Worker static UInt32 g_SplitterPos = 0;
188*f6dc9357SAndroid Build Coastguard Worker static CSplitterPos g_Splitter;
189*f6dc9357SAndroid Build Coastguard Worker static bool g_PanelsInfoDefined = false;
190*f6dc9357SAndroid Build Coastguard Worker static bool g_WindowWasCreated = false;
191*f6dc9357SAndroid Build Coastguard Worker
192*f6dc9357SAndroid Build Coastguard Worker static int g_StartCaptureMousePos;
193*f6dc9357SAndroid Build Coastguard Worker static int g_StartCaptureSplitterPos;
194*f6dc9357SAndroid Build Coastguard Worker
195*f6dc9357SAndroid Build Coastguard Worker CApp g_App;
196*f6dc9357SAndroid Build Coastguard Worker
197*f6dc9357SAndroid Build Coastguard Worker LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
198*f6dc9357SAndroid Build Coastguard Worker
199*f6dc9357SAndroid Build Coastguard Worker static const wchar_t * const kWindowClass = L"7-Zip::FM";
200*f6dc9357SAndroid Build Coastguard Worker
201*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
202*f6dc9357SAndroid Build Coastguard Worker #define WS_OVERLAPPEDWINDOW ( \
203*f6dc9357SAndroid Build Coastguard Worker WS_OVERLAPPED | \
204*f6dc9357SAndroid Build Coastguard Worker WS_CAPTION | \
205*f6dc9357SAndroid Build Coastguard Worker WS_SYSMENU | \
206*f6dc9357SAndroid Build Coastguard Worker WS_THICKFRAME | \
207*f6dc9357SAndroid Build Coastguard Worker WS_MINIMIZEBOX | \
208*f6dc9357SAndroid Build Coastguard Worker WS_MAXIMIZEBOX)
209*f6dc9357SAndroid Build Coastguard Worker #endif
210*f6dc9357SAndroid Build Coastguard Worker
211*f6dc9357SAndroid Build Coastguard Worker
212*f6dc9357SAndroid Build Coastguard Worker /*
213*f6dc9357SAndroid Build Coastguard Worker typedef HRESULT (WINAPI *Func_SetWindowTheme)(
214*f6dc9357SAndroid Build Coastguard Worker HWND hwnd,
215*f6dc9357SAndroid Build Coastguard Worker LPCWSTR pszSubAppName,
216*f6dc9357SAndroid Build Coastguard Worker LPCWSTR pszSubIdList
217*f6dc9357SAndroid Build Coastguard Worker );
218*f6dc9357SAndroid Build Coastguard Worker
219*f6dc9357SAndroid Build Coastguard Worker typedef BOOL (WINAPI *Func_AllowDarkModeForWindow)(
220*f6dc9357SAndroid Build Coastguard Worker HWND a_HWND, BOOL a_Allow);
221*f6dc9357SAndroid Build Coastguard Worker
222*f6dc9357SAndroid Build Coastguard Worker enum PreferredAppMode
223*f6dc9357SAndroid Build Coastguard Worker {
224*f6dc9357SAndroid Build Coastguard Worker Default,
225*f6dc9357SAndroid Build Coastguard Worker AllowDark,
226*f6dc9357SAndroid Build Coastguard Worker ForceDark,
227*f6dc9357SAndroid Build Coastguard Worker ForceLight,
228*f6dc9357SAndroid Build Coastguard Worker Max
229*f6dc9357SAndroid Build Coastguard Worker };
230*f6dc9357SAndroid Build Coastguard Worker // ordinal 135, in 1903
231*f6dc9357SAndroid Build Coastguard Worker typedef BOOL (WINAPI *Func_SetPreferredAppMode)(PreferredAppMode appMode);
232*f6dc9357SAndroid Build Coastguard Worker
233*f6dc9357SAndroid Build Coastguard Worker typedef HRESULT (WINAPI *Func_DwmSetWindowAttribute)(
234*f6dc9357SAndroid Build Coastguard Worker HWND hwnd,
235*f6dc9357SAndroid Build Coastguard Worker DWORD dwAttribute,
236*f6dc9357SAndroid Build Coastguard Worker LPCVOID pvAttribute,
237*f6dc9357SAndroid Build Coastguard Worker DWORD cbAttribute
238*f6dc9357SAndroid Build Coastguard Worker );
239*f6dc9357SAndroid Build Coastguard Worker */
240*f6dc9357SAndroid Build Coastguard Worker
InitInstance(int nCmdShow)241*f6dc9357SAndroid Build Coastguard Worker static BOOL InitInstance(int nCmdShow)
242*f6dc9357SAndroid Build Coastguard Worker {
243*f6dc9357SAndroid Build Coastguard Worker CWindow wnd;
244*f6dc9357SAndroid Build Coastguard Worker
245*f6dc9357SAndroid Build Coastguard Worker // LoadString(hInstance, IDS_CLASS, windowClass, MAX_LOADSTRING);
246*f6dc9357SAndroid Build Coastguard Worker
247*f6dc9357SAndroid Build Coastguard Worker UString title ("7-Zip"); // LangString(IDS_APP_TITLE, 0x03000000);
248*f6dc9357SAndroid Build Coastguard Worker
249*f6dc9357SAndroid Build Coastguard Worker /*
250*f6dc9357SAndroid Build Coastguard Worker //If it is already running, then focus on the window
251*f6dc9357SAndroid Build Coastguard Worker hWnd = FindWindow(windowClass, title);
252*f6dc9357SAndroid Build Coastguard Worker if (hWnd)
253*f6dc9357SAndroid Build Coastguard Worker {
254*f6dc9357SAndroid Build Coastguard Worker SetForegroundWindow ((HWND) (((DWORD)hWnd) | 0x01));
255*f6dc9357SAndroid Build Coastguard Worker return 0;
256*f6dc9357SAndroid Build Coastguard Worker }
257*f6dc9357SAndroid Build Coastguard Worker */
258*f6dc9357SAndroid Build Coastguard Worker
259*f6dc9357SAndroid Build Coastguard Worker WNDCLASSW wc;
260*f6dc9357SAndroid Build Coastguard Worker
261*f6dc9357SAndroid Build Coastguard Worker // wc.style = CS_HREDRAW | CS_VREDRAW;
262*f6dc9357SAndroid Build Coastguard Worker wc.style = 0;
263*f6dc9357SAndroid Build Coastguard Worker wc.lpfnWndProc = (WNDPROC) WndProc;
264*f6dc9357SAndroid Build Coastguard Worker wc.cbClsExtra = 0;
265*f6dc9357SAndroid Build Coastguard Worker wc.cbWndExtra = 0;
266*f6dc9357SAndroid Build Coastguard Worker wc.hInstance = g_hInstance;
267*f6dc9357SAndroid Build Coastguard Worker wc.hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON));
268*f6dc9357SAndroid Build Coastguard Worker
269*f6dc9357SAndroid Build Coastguard Worker // wc.hCursor = LoadCursor (NULL, IDC_ARROW);
270*f6dc9357SAndroid Build Coastguard Worker wc.hCursor = ::LoadCursor(NULL, IDC_SIZEWE);
271*f6dc9357SAndroid Build Coastguard Worker // wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
272*f6dc9357SAndroid Build Coastguard Worker wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
273*f6dc9357SAndroid Build Coastguard Worker
274*f6dc9357SAndroid Build Coastguard Worker wc.lpszMenuName =
275*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
276*f6dc9357SAndroid Build Coastguard Worker 0
277*f6dc9357SAndroid Build Coastguard Worker #else
278*f6dc9357SAndroid Build Coastguard Worker MAKEINTRESOURCEW(IDM_MENU)
279*f6dc9357SAndroid Build Coastguard Worker #endif
280*f6dc9357SAndroid Build Coastguard Worker ;
281*f6dc9357SAndroid Build Coastguard Worker
282*f6dc9357SAndroid Build Coastguard Worker wc.lpszClassName = kWindowClass;
283*f6dc9357SAndroid Build Coastguard Worker
284*f6dc9357SAndroid Build Coastguard Worker if (MyRegisterClass(&wc) == 0)
285*f6dc9357SAndroid Build Coastguard Worker return FALSE;
286*f6dc9357SAndroid Build Coastguard Worker
287*f6dc9357SAndroid Build Coastguard Worker // RECT rect;
288*f6dc9357SAndroid Build Coastguard Worker // GetClientRect(hWnd, &rect);
289*f6dc9357SAndroid Build Coastguard Worker
290*f6dc9357SAndroid Build Coastguard Worker DWORD style = WS_OVERLAPPEDWINDOW;
291*f6dc9357SAndroid Build Coastguard Worker // DWORD style = 0;
292*f6dc9357SAndroid Build Coastguard Worker
293*f6dc9357SAndroid Build Coastguard Worker CWindowInfo info;
294*f6dc9357SAndroid Build Coastguard Worker info.maximized = false;
295*f6dc9357SAndroid Build Coastguard Worker int x, y, xSize, ySize;
296*f6dc9357SAndroid Build Coastguard Worker x = y = xSize = ySize = CW_USEDEFAULT;
297*f6dc9357SAndroid Build Coastguard Worker bool windowPosIsRead;
298*f6dc9357SAndroid Build Coastguard Worker info.Read(windowPosIsRead, g_PanelsInfoDefined);
299*f6dc9357SAndroid Build Coastguard Worker
300*f6dc9357SAndroid Build Coastguard Worker if (windowPosIsRead)
301*f6dc9357SAndroid Build Coastguard Worker {
302*f6dc9357SAndroid Build Coastguard Worker x = info.rect.left;
303*f6dc9357SAndroid Build Coastguard Worker y = info.rect.top;
304*f6dc9357SAndroid Build Coastguard Worker
305*f6dc9357SAndroid Build Coastguard Worker xSize = RECT_SIZE_X(info.rect);
306*f6dc9357SAndroid Build Coastguard Worker ySize = RECT_SIZE_Y(info.rect);
307*f6dc9357SAndroid Build Coastguard Worker }
308*f6dc9357SAndroid Build Coastguard Worker
309*f6dc9357SAndroid Build Coastguard Worker
310*f6dc9357SAndroid Build Coastguard Worker if (g_PanelsInfoDefined)
311*f6dc9357SAndroid Build Coastguard Worker {
312*f6dc9357SAndroid Build Coastguard Worker g_SplitterPos = info.splitterPos;
313*f6dc9357SAndroid Build Coastguard Worker if (info.numPanels < 1 || info.numPanels > 2)
314*f6dc9357SAndroid Build Coastguard Worker info.numPanels = kNumDefaultPanels;
315*f6dc9357SAndroid Build Coastguard Worker if (info.currentPanel >= 2)
316*f6dc9357SAndroid Build Coastguard Worker info.currentPanel = 0;
317*f6dc9357SAndroid Build Coastguard Worker }
318*f6dc9357SAndroid Build Coastguard Worker else
319*f6dc9357SAndroid Build Coastguard Worker {
320*f6dc9357SAndroid Build Coastguard Worker info.numPanels = kNumDefaultPanels;
321*f6dc9357SAndroid Build Coastguard Worker info.currentPanel = 0;
322*f6dc9357SAndroid Build Coastguard Worker }
323*f6dc9357SAndroid Build Coastguard Worker
324*f6dc9357SAndroid Build Coastguard Worker g_App.NumPanels = info.numPanels;
325*f6dc9357SAndroid Build Coastguard Worker g_App.LastFocusedPanel = info.currentPanel;
326*f6dc9357SAndroid Build Coastguard Worker
327*f6dc9357SAndroid Build Coastguard Worker if (!wnd.Create(kWindowClass, title, style,
328*f6dc9357SAndroid Build Coastguard Worker x, y, xSize, ySize, NULL, NULL, g_hInstance, NULL))
329*f6dc9357SAndroid Build Coastguard Worker return FALSE;
330*f6dc9357SAndroid Build Coastguard Worker
331*f6dc9357SAndroid Build Coastguard Worker /*
332*f6dc9357SAndroid Build Coastguard Worker // doesn't work
333*f6dc9357SAndroid Build Coastguard Worker {
334*f6dc9357SAndroid Build Coastguard Worker const HMODULE hmodule = LoadLibrary("UxTheme.dll");
335*f6dc9357SAndroid Build Coastguard Worker if (hmodule)
336*f6dc9357SAndroid Build Coastguard Worker {
337*f6dc9357SAndroid Build Coastguard Worker {
338*f6dc9357SAndroid Build Coastguard Worker const
339*f6dc9357SAndroid Build Coastguard Worker Func_AllowDarkModeForWindow f = Z7_GET_PROC_ADDRESS(
340*f6dc9357SAndroid Build Coastguard Worker Func_AllowDarkModeForWindow, hmodule,
341*f6dc9357SAndroid Build Coastguard Worker MAKEINTRESOURCEA(133));
342*f6dc9357SAndroid Build Coastguard Worker if (f)
343*f6dc9357SAndroid Build Coastguard Worker {
344*f6dc9357SAndroid Build Coastguard Worker BOOL res = f((HWND)wnd, TRUE);
345*f6dc9357SAndroid Build Coastguard Worker res = res;
346*f6dc9357SAndroid Build Coastguard Worker }
347*f6dc9357SAndroid Build Coastguard Worker }
348*f6dc9357SAndroid Build Coastguard Worker {
349*f6dc9357SAndroid Build Coastguard Worker const
350*f6dc9357SAndroid Build Coastguard Worker Func_SetPreferredAppMode f = Z7_GET_PROC_ADDRESS(
351*f6dc9357SAndroid Build Coastguard Worker Func_SetPreferredAppMode, hmodule,
352*f6dc9357SAndroid Build Coastguard Worker MAKEINTRESOURCEA(135));
353*f6dc9357SAndroid Build Coastguard Worker if (f)
354*f6dc9357SAndroid Build Coastguard Worker {
355*f6dc9357SAndroid Build Coastguard Worker f(ForceDark);
356*f6dc9357SAndroid Build Coastguard Worker }
357*f6dc9357SAndroid Build Coastguard Worker }
358*f6dc9357SAndroid Build Coastguard Worker {
359*f6dc9357SAndroid Build Coastguard Worker const
360*f6dc9357SAndroid Build Coastguard Worker Func_SetWindowTheme f = Z7_GET_PROC_ADDRESS(
361*f6dc9357SAndroid Build Coastguard Worker Func_SetWindowTheme, hmodule,
362*f6dc9357SAndroid Build Coastguard Worker "SetWindowTheme");
363*f6dc9357SAndroid Build Coastguard Worker if (f)
364*f6dc9357SAndroid Build Coastguard Worker {
365*f6dc9357SAndroid Build Coastguard Worker // HRESULT hres = f((HWND)wnd, L"DarkMode_Explorer", NULL);
366*f6dc9357SAndroid Build Coastguard Worker HRESULT hres = f((HWND)wnd, L"Explorer", NULL);
367*f6dc9357SAndroid Build Coastguard Worker hres = hres;
368*f6dc9357SAndroid Build Coastguard Worker }
369*f6dc9357SAndroid Build Coastguard Worker }
370*f6dc9357SAndroid Build Coastguard Worker FreeLibrary(hmodule);
371*f6dc9357SAndroid Build Coastguard Worker }
372*f6dc9357SAndroid Build Coastguard Worker }
373*f6dc9357SAndroid Build Coastguard Worker {
374*f6dc9357SAndroid Build Coastguard Worker const HMODULE hmodule = LoadLibrary("Dwmapi.dll");
375*f6dc9357SAndroid Build Coastguard Worker if (hmodule)
376*f6dc9357SAndroid Build Coastguard Worker {
377*f6dc9357SAndroid Build Coastguard Worker const
378*f6dc9357SAndroid Build Coastguard Worker Func_DwmSetWindowAttribute f = Z7_GET_PROC_ADDRESS(
379*f6dc9357SAndroid Build Coastguard Worker Func_DwmSetWindowAttribute, hmodule,
380*f6dc9357SAndroid Build Coastguard Worker "DwmSetWindowAttribute");
381*f6dc9357SAndroid Build Coastguard Worker if (f)
382*f6dc9357SAndroid Build Coastguard Worker {
383*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_WIN_DWMWA_USE_IMMERSIVE_DARK_MODE
384*f6dc9357SAndroid Build Coastguard Worker #define Z7_WIN_DWMWA_USE_IMMERSIVE_DARK_MODE 20
385*f6dc9357SAndroid Build Coastguard Worker #endif
386*f6dc9357SAndroid Build Coastguard Worker BOOL value = TRUE;
387*f6dc9357SAndroid Build Coastguard Worker f((HWND)wnd, Z7_WIN_DWMWA_USE_IMMERSIVE_DARK_MODE, &value, sizeof(value));
388*f6dc9357SAndroid Build Coastguard Worker }
389*f6dc9357SAndroid Build Coastguard Worker FreeLibrary(hmodule);
390*f6dc9357SAndroid Build Coastguard Worker }
391*f6dc9357SAndroid Build Coastguard Worker }
392*f6dc9357SAndroid Build Coastguard Worker */
393*f6dc9357SAndroid Build Coastguard Worker
394*f6dc9357SAndroid Build Coastguard Worker if (nCmdShow == SW_SHOWNORMAL ||
395*f6dc9357SAndroid Build Coastguard Worker nCmdShow == SW_SHOW
396*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
397*f6dc9357SAndroid Build Coastguard Worker || nCmdShow == SW_SHOWDEFAULT
398*f6dc9357SAndroid Build Coastguard Worker #endif
399*f6dc9357SAndroid Build Coastguard Worker )
400*f6dc9357SAndroid Build Coastguard Worker {
401*f6dc9357SAndroid Build Coastguard Worker if (info.maximized)
402*f6dc9357SAndroid Build Coastguard Worker nCmdShow = SW_SHOWMAXIMIZED;
403*f6dc9357SAndroid Build Coastguard Worker else
404*f6dc9357SAndroid Build Coastguard Worker nCmdShow = SW_SHOWNORMAL;
405*f6dc9357SAndroid Build Coastguard Worker }
406*f6dc9357SAndroid Build Coastguard Worker
407*f6dc9357SAndroid Build Coastguard Worker if (nCmdShow == SW_SHOWMAXIMIZED)
408*f6dc9357SAndroid Build Coastguard Worker g_Maximized = true;
409*f6dc9357SAndroid Build Coastguard Worker
410*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
411*f6dc9357SAndroid Build Coastguard Worker WINDOWPLACEMENT placement;
412*f6dc9357SAndroid Build Coastguard Worker placement.length = sizeof(placement);
413*f6dc9357SAndroid Build Coastguard Worker if (wnd.GetPlacement(&placement))
414*f6dc9357SAndroid Build Coastguard Worker {
415*f6dc9357SAndroid Build Coastguard Worker if (windowPosIsRead)
416*f6dc9357SAndroid Build Coastguard Worker placement.rcNormalPosition = info.rect;
417*f6dc9357SAndroid Build Coastguard Worker placement.showCmd = (UINT)nCmdShow;
418*f6dc9357SAndroid Build Coastguard Worker wnd.SetPlacement(&placement);
419*f6dc9357SAndroid Build Coastguard Worker }
420*f6dc9357SAndroid Build Coastguard Worker else
421*f6dc9357SAndroid Build Coastguard Worker #endif
422*f6dc9357SAndroid Build Coastguard Worker wnd.Show(nCmdShow);
423*f6dc9357SAndroid Build Coastguard Worker
424*f6dc9357SAndroid Build Coastguard Worker return TRUE;
425*f6dc9357SAndroid Build Coastguard Worker }
426*f6dc9357SAndroid Build Coastguard Worker
427*f6dc9357SAndroid Build Coastguard Worker /*
428*f6dc9357SAndroid Build Coastguard Worker static void GetCommands(const UString &aCommandLine, UString &aCommands)
429*f6dc9357SAndroid Build Coastguard Worker {
430*f6dc9357SAndroid Build Coastguard Worker UString aProgramName;
431*f6dc9357SAndroid Build Coastguard Worker aCommands.Empty();
432*f6dc9357SAndroid Build Coastguard Worker bool aQuoteMode = false;
433*f6dc9357SAndroid Build Coastguard Worker for (int i = 0; i < aCommandLine.Length(); i++)
434*f6dc9357SAndroid Build Coastguard Worker {
435*f6dc9357SAndroid Build Coastguard Worker wchar_t aChar = aCommandLine[i];
436*f6dc9357SAndroid Build Coastguard Worker if (aChar == L'\"')
437*f6dc9357SAndroid Build Coastguard Worker aQuoteMode = !aQuoteMode;
438*f6dc9357SAndroid Build Coastguard Worker else if (aChar == L' ' && !aQuoteMode)
439*f6dc9357SAndroid Build Coastguard Worker {
440*f6dc9357SAndroid Build Coastguard Worker if (!aQuoteMode)
441*f6dc9357SAndroid Build Coastguard Worker {
442*f6dc9357SAndroid Build Coastguard Worker i++;
443*f6dc9357SAndroid Build Coastguard Worker break;
444*f6dc9357SAndroid Build Coastguard Worker }
445*f6dc9357SAndroid Build Coastguard Worker }
446*f6dc9357SAndroid Build Coastguard Worker else
447*f6dc9357SAndroid Build Coastguard Worker aProgramName += aChar;
448*f6dc9357SAndroid Build Coastguard Worker }
449*f6dc9357SAndroid Build Coastguard Worker aCommands = aCommandLine.Ptr(i);
450*f6dc9357SAndroid Build Coastguard Worker }
451*f6dc9357SAndroid Build Coastguard Worker */
452*f6dc9357SAndroid Build Coastguard Worker
453*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(_WIN64) && !defined(UNDER_CE)
454*f6dc9357SAndroid Build Coastguard Worker
455*f6dc9357SAndroid Build Coastguard Worker extern
456*f6dc9357SAndroid Build Coastguard Worker bool g_Is_Wow64;
457*f6dc9357SAndroid Build Coastguard Worker bool g_Is_Wow64;
458*f6dc9357SAndroid Build Coastguard Worker
459*f6dc9357SAndroid Build Coastguard Worker typedef BOOL (WINAPI *Func_IsWow64Process)(HANDLE, PBOOL);
460*f6dc9357SAndroid Build Coastguard Worker
Set_Wow64()461*f6dc9357SAndroid Build Coastguard Worker static void Set_Wow64()
462*f6dc9357SAndroid Build Coastguard Worker {
463*f6dc9357SAndroid Build Coastguard Worker g_Is_Wow64 = false;
464*f6dc9357SAndroid Build Coastguard Worker const
465*f6dc9357SAndroid Build Coastguard Worker Func_IsWow64Process fn = Z7_GET_PROC_ADDRESS(
466*f6dc9357SAndroid Build Coastguard Worker Func_IsWow64Process, GetModuleHandleA("kernel32.dll"),
467*f6dc9357SAndroid Build Coastguard Worker "IsWow64Process");
468*f6dc9357SAndroid Build Coastguard Worker if (fn)
469*f6dc9357SAndroid Build Coastguard Worker {
470*f6dc9357SAndroid Build Coastguard Worker BOOL isWow;
471*f6dc9357SAndroid Build Coastguard Worker if (fn(GetCurrentProcess(), &isWow))
472*f6dc9357SAndroid Build Coastguard Worker g_Is_Wow64 = (isWow != FALSE);
473*f6dc9357SAndroid Build Coastguard Worker }
474*f6dc9357SAndroid Build Coastguard Worker }
475*f6dc9357SAndroid Build Coastguard Worker
476*f6dc9357SAndroid Build Coastguard Worker #endif
477*f6dc9357SAndroid Build Coastguard Worker
478*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER > 1400 /* && _MSC_VER <= 1900 */
479*f6dc9357SAndroid Build Coastguard Worker // GetVersion was declared deprecated
480*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4996)
481*f6dc9357SAndroid Build Coastguard Worker #endif
482*f6dc9357SAndroid Build Coastguard Worker #ifdef __clang__
483*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
484*f6dc9357SAndroid Build Coastguard Worker #endif
485*f6dc9357SAndroid Build Coastguard Worker
486*f6dc9357SAndroid Build Coastguard Worker bool IsLargePageSupported();
IsLargePageSupported()487*f6dc9357SAndroid Build Coastguard Worker bool IsLargePageSupported()
488*f6dc9357SAndroid Build Coastguard Worker {
489*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN64
490*f6dc9357SAndroid Build Coastguard Worker return true;
491*f6dc9357SAndroid Build Coastguard Worker #else
492*f6dc9357SAndroid Build Coastguard Worker
493*f6dc9357SAndroid Build Coastguard Worker DWORD v = GetVersion();
494*f6dc9357SAndroid Build Coastguard Worker // low byte is major version:
495*f6dc9357SAndroid Build Coastguard Worker // next byte is minor version:
496*f6dc9357SAndroid Build Coastguard Worker v = ((v & 0xff) << 8) | ((v >> 8) & 0xFF);
497*f6dc9357SAndroid Build Coastguard Worker return (v > 0x501);
498*f6dc9357SAndroid Build Coastguard Worker // if ((Byte)v < 5) return false;
499*f6dc9357SAndroid Build Coastguard Worker // if ((Byte)v > 5) return true;
500*f6dc9357SAndroid Build Coastguard Worker // return ((Byte)(v >> 8) > 1);
501*f6dc9357SAndroid Build Coastguard Worker /* large pages work in 5.1 (XP-32bit) if it's (g_Is_Wow64) mode;
502*f6dc9357SAndroid Build Coastguard Worker but here we don't enable them in (XP-32bit). */
503*f6dc9357SAndroid Build Coastguard Worker #endif
504*f6dc9357SAndroid Build Coastguard Worker }
505*f6dc9357SAndroid Build Coastguard Worker
506*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
507*f6dc9357SAndroid Build Coastguard Worker
SetMemoryLock()508*f6dc9357SAndroid Build Coastguard Worker static void SetMemoryLock()
509*f6dc9357SAndroid Build Coastguard Worker {
510*f6dc9357SAndroid Build Coastguard Worker if (!IsLargePageSupported())
511*f6dc9357SAndroid Build Coastguard Worker return;
512*f6dc9357SAndroid Build Coastguard Worker // if (ReadLockMemoryAdd())
513*f6dc9357SAndroid Build Coastguard Worker NSecurity::AddLockMemoryPrivilege();
514*f6dc9357SAndroid Build Coastguard Worker
515*f6dc9357SAndroid Build Coastguard Worker if (ReadLockMemoryEnable())
516*f6dc9357SAndroid Build Coastguard Worker if (NSecurity::Get_LargePages_RiskLevel() == 0)
517*f6dc9357SAndroid Build Coastguard Worker {
518*f6dc9357SAndroid Build Coastguard Worker // note: child processes can inherit that Privilege
519*f6dc9357SAndroid Build Coastguard Worker g_LargePagesMode = NSecurity::EnablePrivilege_LockMemory();
520*f6dc9357SAndroid Build Coastguard Worker }
521*f6dc9357SAndroid Build Coastguard Worker }
522*f6dc9357SAndroid Build Coastguard Worker
523*f6dc9357SAndroid Build Coastguard Worker extern
524*f6dc9357SAndroid Build Coastguard Worker bool g_SymLink_Supported;
525*f6dc9357SAndroid Build Coastguard Worker bool g_SymLink_Supported = false;
526*f6dc9357SAndroid Build Coastguard Worker
Set_SymLink_Supported()527*f6dc9357SAndroid Build Coastguard Worker static void Set_SymLink_Supported()
528*f6dc9357SAndroid Build Coastguard Worker {
529*f6dc9357SAndroid Build Coastguard Worker // g_SymLink_Supported = false;
530*f6dc9357SAndroid Build Coastguard Worker const DWORD v = GetVersion();
531*f6dc9357SAndroid Build Coastguard Worker // low byte is major version:
532*f6dc9357SAndroid Build Coastguard Worker if ((Byte)v < 6)
533*f6dc9357SAndroid Build Coastguard Worker return;
534*f6dc9357SAndroid Build Coastguard Worker g_SymLink_Supported = true;
535*f6dc9357SAndroid Build Coastguard Worker // if (g_SymLink_Supported)
536*f6dc9357SAndroid Build Coastguard Worker {
537*f6dc9357SAndroid Build Coastguard Worker NSecurity::EnablePrivilege_SymLink();
538*f6dc9357SAndroid Build Coastguard Worker }
539*f6dc9357SAndroid Build Coastguard Worker }
540*f6dc9357SAndroid Build Coastguard Worker
541*f6dc9357SAndroid Build Coastguard Worker #endif
542*f6dc9357SAndroid Build Coastguard Worker
543*f6dc9357SAndroid Build Coastguard Worker /*
544*f6dc9357SAndroid Build Coastguard Worker static const int kNumSwitches = 1;
545*f6dc9357SAndroid Build Coastguard Worker
546*f6dc9357SAndroid Build Coastguard Worker namespace NKey {
547*f6dc9357SAndroid Build Coastguard Worker enum Enum
548*f6dc9357SAndroid Build Coastguard Worker {
549*f6dc9357SAndroid Build Coastguard Worker kOpenArachive = 0
550*f6dc9357SAndroid Build Coastguard Worker };
551*f6dc9357SAndroid Build Coastguard Worker
552*f6dc9357SAndroid Build Coastguard Worker }
553*f6dc9357SAndroid Build Coastguard Worker
554*f6dc9357SAndroid Build Coastguard Worker static const CSwitchForm kSwitchForms[kNumSwitches] =
555*f6dc9357SAndroid Build Coastguard Worker {
556*f6dc9357SAndroid Build Coastguard Worker { L"SOA", NSwitchType::kSimple, false },
557*f6dc9357SAndroid Build Coastguard Worker };
558*f6dc9357SAndroid Build Coastguard Worker */
559*f6dc9357SAndroid Build Coastguard Worker
560*f6dc9357SAndroid Build Coastguard Worker // int APIENTRY WinMain2(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, LPSTR /* lpCmdLine */, int /* nCmdShow */);
561*f6dc9357SAndroid Build Coastguard Worker
ErrorMessage(const wchar_t * s)562*f6dc9357SAndroid Build Coastguard Worker static void ErrorMessage(const wchar_t *s)
563*f6dc9357SAndroid Build Coastguard Worker {
564*f6dc9357SAndroid Build Coastguard Worker MessageBoxW(NULL, s, L"7-Zip", MB_ICONERROR);
565*f6dc9357SAndroid Build Coastguard Worker }
566*f6dc9357SAndroid Build Coastguard Worker
ErrorMessage(const char * s)567*f6dc9357SAndroid Build Coastguard Worker static void ErrorMessage(const char *s)
568*f6dc9357SAndroid Build Coastguard Worker {
569*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(GetUnicodeString(s));
570*f6dc9357SAndroid Build Coastguard Worker }
571*f6dc9357SAndroid Build Coastguard Worker
572*f6dc9357SAndroid Build Coastguard Worker
573*f6dc9357SAndroid Build Coastguard Worker #if defined(_UNICODE) && !defined(_WIN64) && !defined(UNDER_CE)
574*f6dc9357SAndroid Build Coastguard Worker #define NT_CHECK_FAIL_ACTION ErrorMessage("Unsupported Windows version"); return 1;
575*f6dc9357SAndroid Build Coastguard Worker #endif
576*f6dc9357SAndroid Build Coastguard Worker
WinMain2(int nCmdShow)577*f6dc9357SAndroid Build Coastguard Worker static int WINAPI WinMain2(int nCmdShow)
578*f6dc9357SAndroid Build Coastguard Worker {
579*f6dc9357SAndroid Build Coastguard Worker g_RAM_Size_Defined = NSystem::GetRamSize(g_RAM_Size);
580*f6dc9357SAndroid Build Coastguard Worker
581*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
582*f6dc9357SAndroid Build Coastguard Worker
583*f6dc9357SAndroid Build Coastguard Worker /*
584*f6dc9357SAndroid Build Coastguard Worker #ifndef _WIN64
585*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
586*f6dc9357SAndroid Build Coastguard Worker {
587*f6dc9357SAndroid Build Coastguard Worker HMODULE hMod = GetModuleHandle("Kernel32.dll");
588*f6dc9357SAndroid Build Coastguard Worker if (hMod)
589*f6dc9357SAndroid Build Coastguard Worker {
590*f6dc9357SAndroid Build Coastguard Worker typedef BOOL (WINAPI *PSETDEP)(DWORD);
591*f6dc9357SAndroid Build Coastguard Worker #define MY_PROCESS_DEP_ENABLE 1
592*f6dc9357SAndroid Build Coastguard Worker PSETDEP procSet = (PSETDEP)GetProcAddress(hMod,"SetProcessDEPPolicy");
593*f6dc9357SAndroid Build Coastguard Worker if (procSet)
594*f6dc9357SAndroid Build Coastguard Worker procSet(MY_PROCESS_DEP_ENABLE);
595*f6dc9357SAndroid Build Coastguard Worker
596*f6dc9357SAndroid Build Coastguard Worker typedef BOOL (WINAPI *HSI)(HANDLE, HEAP_INFORMATION_CLASS ,PVOID, SIZE_T);
597*f6dc9357SAndroid Build Coastguard Worker HSI hsi = (HSI)GetProcAddress(hMod, "HeapSetInformation");
598*f6dc9357SAndroid Build Coastguard Worker #define MY_HeapEnableTerminationOnCorruption ((HEAP_INFORMATION_CLASS)1)
599*f6dc9357SAndroid Build Coastguard Worker if (hsi)
600*f6dc9357SAndroid Build Coastguard Worker hsi(NULL, MY_HeapEnableTerminationOnCorruption, NULL, 0);
601*f6dc9357SAndroid Build Coastguard Worker }
602*f6dc9357SAndroid Build Coastguard Worker }
603*f6dc9357SAndroid Build Coastguard Worker #endif
604*f6dc9357SAndroid Build Coastguard Worker #endif
605*f6dc9357SAndroid Build Coastguard Worker */
606*f6dc9357SAndroid Build Coastguard Worker
607*f6dc9357SAndroid Build Coastguard Worker NT_CHECK
608*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LARGE_PAGES
609*f6dc9357SAndroid Build Coastguard Worker SetLargePageSize();
610*f6dc9357SAndroid Build Coastguard Worker #endif
611*f6dc9357SAndroid Build Coastguard Worker
612*f6dc9357SAndroid Build Coastguard Worker #endif
613*f6dc9357SAndroid Build Coastguard Worker
614*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
615*f6dc9357SAndroid Build Coastguard Worker LoadLangOneTime();
616*f6dc9357SAndroid Build Coastguard Worker #endif
617*f6dc9357SAndroid Build Coastguard Worker
618*f6dc9357SAndroid Build Coastguard Worker InitCommonControls();
619*f6dc9357SAndroid Build Coastguard Worker
620*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_USE_DYN_ComCtl32Version
621*f6dc9357SAndroid Build Coastguard Worker g_ComCtl32Version = ::GetDllVersion(TEXT("comctl32.dll"));
622*f6dc9357SAndroid Build Coastguard Worker g_LVN_ITEMACTIVATE_Support = (g_ComCtl32Version >= MAKELONG(71, 4));
623*f6dc9357SAndroid Build Coastguard Worker #endif
624*f6dc9357SAndroid Build Coastguard Worker
625*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(_WIN64) && !defined(UNDER_CE)
626*f6dc9357SAndroid Build Coastguard Worker Set_Wow64();
627*f6dc9357SAndroid Build Coastguard Worker #endif
628*f6dc9357SAndroid Build Coastguard Worker
629*f6dc9357SAndroid Build Coastguard Worker
630*f6dc9357SAndroid Build Coastguard Worker g_IsSmallScreen = !NWindows::NControl::IsDialogSizeOK(200, 200);
631*f6dc9357SAndroid Build Coastguard Worker
632*f6dc9357SAndroid Build Coastguard Worker // OleInitialize is required for drag and drop.
633*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
634*f6dc9357SAndroid Build Coastguard Worker OleInitialize(NULL);
635*f6dc9357SAndroid Build Coastguard Worker #endif
636*f6dc9357SAndroid Build Coastguard Worker // Maybe needs CoInitializeEx also ?
637*f6dc9357SAndroid Build Coastguard Worker // NCOM::CComInitializer comInitializer;
638*f6dc9357SAndroid Build Coastguard Worker
639*f6dc9357SAndroid Build Coastguard Worker UString commandsString;
640*f6dc9357SAndroid Build Coastguard Worker // MessageBoxW(NULL, GetCommandLineW(), L"", 0);
641*f6dc9357SAndroid Build Coastguard Worker
642*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
643*f6dc9357SAndroid Build Coastguard Worker commandsString = GetCommandLineW();
644*f6dc9357SAndroid Build Coastguard Worker #else
645*f6dc9357SAndroid Build Coastguard Worker UString programString;
646*f6dc9357SAndroid Build Coastguard Worker SplitStringToTwoStrings(GetCommandLineW(), programString, commandsString);
647*f6dc9357SAndroid Build Coastguard Worker #endif
648*f6dc9357SAndroid Build Coastguard Worker
649*f6dc9357SAndroid Build Coastguard Worker commandsString.Trim();
650*f6dc9357SAndroid Build Coastguard Worker UString paramString, tailString;
651*f6dc9357SAndroid Build Coastguard Worker SplitStringToTwoStrings(commandsString, paramString, tailString);
652*f6dc9357SAndroid Build Coastguard Worker paramString.Trim();
653*f6dc9357SAndroid Build Coastguard Worker tailString.Trim();
654*f6dc9357SAndroid Build Coastguard Worker if (tailString.IsPrefixedBy(L"-t"))
655*f6dc9357SAndroid Build Coastguard Worker g_ArcFormat = tailString.Ptr(2);
656*f6dc9357SAndroid Build Coastguard Worker
657*f6dc9357SAndroid Build Coastguard Worker /*
658*f6dc9357SAndroid Build Coastguard Worker UStringVector switches;
659*f6dc9357SAndroid Build Coastguard Worker for (;;)
660*f6dc9357SAndroid Build Coastguard Worker {
661*f6dc9357SAndroid Build Coastguard Worker if (tailString.IsEmpty())
662*f6dc9357SAndroid Build Coastguard Worker break;
663*f6dc9357SAndroid Build Coastguard Worker UString s1, s2;
664*f6dc9357SAndroid Build Coastguard Worker SplitStringToTwoStrings(tailString, s1, s2);
665*f6dc9357SAndroid Build Coastguard Worker if (s2.IsEmpty())
666*f6dc9357SAndroid Build Coastguard Worker {
667*f6dc9357SAndroid Build Coastguard Worker tailString.Trim();
668*f6dc9357SAndroid Build Coastguard Worker switches.Add(tailString);
669*f6dc9357SAndroid Build Coastguard Worker break;
670*f6dc9357SAndroid Build Coastguard Worker }
671*f6dc9357SAndroid Build Coastguard Worker s1.Trim();
672*f6dc9357SAndroid Build Coastguard Worker switches.Add(s1);
673*f6dc9357SAndroid Build Coastguard Worker tailString = s2;
674*f6dc9357SAndroid Build Coastguard Worker }
675*f6dc9357SAndroid Build Coastguard Worker
676*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR(i, switches)
677*f6dc9357SAndroid Build Coastguard Worker {
678*f6dc9357SAndroid Build Coastguard Worker const UString &sw = switches[i];
679*f6dc9357SAndroid Build Coastguard Worker if (sw.IsPrefixedBy(L"-t"))
680*f6dc9357SAndroid Build Coastguard Worker g_ArcFormat = sw.Ptr(2);
681*f6dc9357SAndroid Build Coastguard Worker //
682*f6dc9357SAndroid Build Coastguard Worker else if (sw.IsPrefixedBy(L"-stp"))
683*f6dc9357SAndroid Build Coastguard Worker {
684*f6dc9357SAndroid Build Coastguard Worker const wchar_t *end;
685*f6dc9357SAndroid Build Coastguard Worker UInt32 val = ConvertStringToUInt32(sw.Ptr(4), &end);
686*f6dc9357SAndroid Build Coastguard Worker if (*end != 0)
687*f6dc9357SAndroid Build Coastguard Worker throw 111;
688*f6dc9357SAndroid Build Coastguard Worker g_TypeParseLevel = val;
689*f6dc9357SAndroid Build Coastguard Worker }
690*f6dc9357SAndroid Build Coastguard Worker else
691*f6dc9357SAndroid Build Coastguard Worker //
692*f6dc9357SAndroid Build Coastguard Worker throw 112;
693*f6dc9357SAndroid Build Coastguard Worker }
694*f6dc9357SAndroid Build Coastguard Worker */
695*f6dc9357SAndroid Build Coastguard Worker
696*f6dc9357SAndroid Build Coastguard Worker if (!paramString.IsEmpty())
697*f6dc9357SAndroid Build Coastguard Worker {
698*f6dc9357SAndroid Build Coastguard Worker g_MainPath = paramString;
699*f6dc9357SAndroid Build Coastguard Worker // return WinMain2(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
700*f6dc9357SAndroid Build Coastguard Worker
701*f6dc9357SAndroid Build Coastguard Worker // MessageBoxW(NULL, paramString, L"", 0);
702*f6dc9357SAndroid Build Coastguard Worker }
703*f6dc9357SAndroid Build Coastguard Worker /*
704*f6dc9357SAndroid Build Coastguard Worker UStringVector commandStrings;
705*f6dc9357SAndroid Build Coastguard Worker NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings);
706*f6dc9357SAndroid Build Coastguard Worker NCommandLineParser::CParser parser(kNumSwitches);
707*f6dc9357SAndroid Build Coastguard Worker try
708*f6dc9357SAndroid Build Coastguard Worker {
709*f6dc9357SAndroid Build Coastguard Worker parser.ParseStrings(kSwitchForms, commandStrings);
710*f6dc9357SAndroid Build Coastguard Worker const UStringVector &nonSwitchStrings = parser.NonSwitchStrings;
711*f6dc9357SAndroid Build Coastguard Worker if (nonSwitchStrings.Size() > 1)
712*f6dc9357SAndroid Build Coastguard Worker {
713*f6dc9357SAndroid Build Coastguard Worker g_MainPath = nonSwitchStrings[1];
714*f6dc9357SAndroid Build Coastguard Worker // g_OpenArchive = parser[NKey::kOpenArachive].ThereIs;
715*f6dc9357SAndroid Build Coastguard Worker CFileInfoW fileInfo;
716*f6dc9357SAndroid Build Coastguard Worker if (FindFile(g_MainPath, fileInfo))
717*f6dc9357SAndroid Build Coastguard Worker {
718*f6dc9357SAndroid Build Coastguard Worker if (!fileInfo.IsDir())
719*f6dc9357SAndroid Build Coastguard Worker g_OpenArchive = true;
720*f6dc9357SAndroid Build Coastguard Worker }
721*f6dc9357SAndroid Build Coastguard Worker }
722*f6dc9357SAndroid Build Coastguard Worker }
723*f6dc9357SAndroid Build Coastguard Worker catch(...) { }
724*f6dc9357SAndroid Build Coastguard Worker */
725*f6dc9357SAndroid Build Coastguard Worker
726*f6dc9357SAndroid Build Coastguard Worker
727*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE)
728*f6dc9357SAndroid Build Coastguard Worker SetMemoryLock();
729*f6dc9357SAndroid Build Coastguard Worker Set_SymLink_Supported();
730*f6dc9357SAndroid Build Coastguard Worker #endif
731*f6dc9357SAndroid Build Coastguard Worker
732*f6dc9357SAndroid Build Coastguard Worker g_App.ReloadLangItems();
733*f6dc9357SAndroid Build Coastguard Worker
734*f6dc9357SAndroid Build Coastguard Worker MSG msg;
735*f6dc9357SAndroid Build Coastguard Worker if (!InitInstance (nCmdShow))
736*f6dc9357SAndroid Build Coastguard Worker return FALSE;
737*f6dc9357SAndroid Build Coastguard Worker
738*f6dc9357SAndroid Build Coastguard Worker // we will load Global_Codecs at first use instead.
739*f6dc9357SAndroid Build Coastguard Worker /*
740*f6dc9357SAndroid Build Coastguard Worker OutputDebugStringW(L"Before LoadGlobalCodecs");
741*f6dc9357SAndroid Build Coastguard Worker LoadGlobalCodecs();
742*f6dc9357SAndroid Build Coastguard Worker OutputDebugStringW(L"After LoadGlobalCodecs");
743*f6dc9357SAndroid Build Coastguard Worker */
744*f6dc9357SAndroid Build Coastguard Worker
745*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
746*f6dc9357SAndroid Build Coastguard Worker if (g_IsNT)
747*f6dc9357SAndroid Build Coastguard Worker {
748*f6dc9357SAndroid Build Coastguard Worker HACCEL hAccels = LoadAcceleratorsW(g_hInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR1));
749*f6dc9357SAndroid Build Coastguard Worker while (GetMessageW(&msg, NULL, 0, 0))
750*f6dc9357SAndroid Build Coastguard Worker {
751*f6dc9357SAndroid Build Coastguard Worker if (TranslateAcceleratorW(g_HWND, hAccels, &msg) == 0)
752*f6dc9357SAndroid Build Coastguard Worker {
753*f6dc9357SAndroid Build Coastguard Worker TranslateMessage(&msg);
754*f6dc9357SAndroid Build Coastguard Worker DispatchMessageW(&msg);
755*f6dc9357SAndroid Build Coastguard Worker }
756*f6dc9357SAndroid Build Coastguard Worker }
757*f6dc9357SAndroid Build Coastguard Worker }
758*f6dc9357SAndroid Build Coastguard Worker else
759*f6dc9357SAndroid Build Coastguard Worker #endif
760*f6dc9357SAndroid Build Coastguard Worker {
761*f6dc9357SAndroid Build Coastguard Worker HACCEL hAccels = LoadAccelerators(g_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
762*f6dc9357SAndroid Build Coastguard Worker while (GetMessage(&msg, NULL, 0, 0))
763*f6dc9357SAndroid Build Coastguard Worker {
764*f6dc9357SAndroid Build Coastguard Worker if (TranslateAccelerator(g_HWND, hAccels, &msg) == 0)
765*f6dc9357SAndroid Build Coastguard Worker {
766*f6dc9357SAndroid Build Coastguard Worker // if (g_Hwnd != NULL || !IsDialogMessage(g_Hwnd, &msg))
767*f6dc9357SAndroid Build Coastguard Worker // if (!IsDialogMessage(g_Hwnd, &msg))
768*f6dc9357SAndroid Build Coastguard Worker TranslateMessage(&msg);
769*f6dc9357SAndroid Build Coastguard Worker DispatchMessage(&msg);
770*f6dc9357SAndroid Build Coastguard Worker }
771*f6dc9357SAndroid Build Coastguard Worker }
772*f6dc9357SAndroid Build Coastguard Worker }
773*f6dc9357SAndroid Build Coastguard Worker
774*f6dc9357SAndroid Build Coastguard Worker // Destructor of g_CodecsReleaser can release DLLs.
775*f6dc9357SAndroid Build Coastguard Worker // But we suppose that it's better to release DLLs here (before destructor).
776*f6dc9357SAndroid Build Coastguard Worker FreeGlobalCodecs();
777*f6dc9357SAndroid Build Coastguard Worker
778*f6dc9357SAndroid Build Coastguard Worker g_HWND = NULL;
779*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
780*f6dc9357SAndroid Build Coastguard Worker OleUninitialize();
781*f6dc9357SAndroid Build Coastguard Worker #endif
782*f6dc9357SAndroid Build Coastguard Worker return (int)msg.wParam;
783*f6dc9357SAndroid Build Coastguard Worker }
784*f6dc9357SAndroid Build Coastguard Worker
WinMain(HINSTANCE hInstance,HINSTANCE,LPWSTR,int nCmdShow)785*f6dc9357SAndroid Build Coastguard Worker int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */,
786*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
787*f6dc9357SAndroid Build Coastguard Worker LPWSTR
788*f6dc9357SAndroid Build Coastguard Worker #else
789*f6dc9357SAndroid Build Coastguard Worker LPSTR
790*f6dc9357SAndroid Build Coastguard Worker #endif
791*f6dc9357SAndroid Build Coastguard Worker /* lpCmdLine */, int nCmdShow)
792*f6dc9357SAndroid Build Coastguard Worker {
793*f6dc9357SAndroid Build Coastguard Worker g_hInstance = hInstance;
794*f6dc9357SAndroid Build Coastguard Worker
795*f6dc9357SAndroid Build Coastguard Worker try
796*f6dc9357SAndroid Build Coastguard Worker {
797*f6dc9357SAndroid Build Coastguard Worker try
798*f6dc9357SAndroid Build Coastguard Worker {
799*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
800*f6dc9357SAndroid Build Coastguard Worker My_SetDefaultDllDirectories();
801*f6dc9357SAndroid Build Coastguard Worker #endif
802*f6dc9357SAndroid Build Coastguard Worker return WinMain2(nCmdShow);
803*f6dc9357SAndroid Build Coastguard Worker }
804*f6dc9357SAndroid Build Coastguard Worker catch (...)
805*f6dc9357SAndroid Build Coastguard Worker {
806*f6dc9357SAndroid Build Coastguard Worker g_ExitEventLauncher.Exit(true);
807*f6dc9357SAndroid Build Coastguard Worker throw;
808*f6dc9357SAndroid Build Coastguard Worker }
809*f6dc9357SAndroid Build Coastguard Worker }
810*f6dc9357SAndroid Build Coastguard Worker catch(const CNewException &)
811*f6dc9357SAndroid Build Coastguard Worker {
812*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(LangString(IDS_MEM_ERROR));
813*f6dc9357SAndroid Build Coastguard Worker return 1;
814*f6dc9357SAndroid Build Coastguard Worker }
815*f6dc9357SAndroid Build Coastguard Worker catch(const UString &s)
816*f6dc9357SAndroid Build Coastguard Worker {
817*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(s);
818*f6dc9357SAndroid Build Coastguard Worker return 1;
819*f6dc9357SAndroid Build Coastguard Worker }
820*f6dc9357SAndroid Build Coastguard Worker catch(const AString &s)
821*f6dc9357SAndroid Build Coastguard Worker {
822*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(s.Ptr());
823*f6dc9357SAndroid Build Coastguard Worker return 1;
824*f6dc9357SAndroid Build Coastguard Worker }
825*f6dc9357SAndroid Build Coastguard Worker catch(const wchar_t *s)
826*f6dc9357SAndroid Build Coastguard Worker {
827*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(s);
828*f6dc9357SAndroid Build Coastguard Worker return 1;
829*f6dc9357SAndroid Build Coastguard Worker }
830*f6dc9357SAndroid Build Coastguard Worker catch(const char *s)
831*f6dc9357SAndroid Build Coastguard Worker {
832*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(s);
833*f6dc9357SAndroid Build Coastguard Worker return 1;
834*f6dc9357SAndroid Build Coastguard Worker }
835*f6dc9357SAndroid Build Coastguard Worker catch(int v)
836*f6dc9357SAndroid Build Coastguard Worker {
837*f6dc9357SAndroid Build Coastguard Worker AString e ("Error: ");
838*f6dc9357SAndroid Build Coastguard Worker e.Add_UInt32((unsigned)v);
839*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(e);
840*f6dc9357SAndroid Build Coastguard Worker return 1;
841*f6dc9357SAndroid Build Coastguard Worker }
842*f6dc9357SAndroid Build Coastguard Worker catch(...)
843*f6dc9357SAndroid Build Coastguard Worker {
844*f6dc9357SAndroid Build Coastguard Worker ErrorMessage("Unknown error");
845*f6dc9357SAndroid Build Coastguard Worker return 1;
846*f6dc9357SAndroid Build Coastguard Worker }
847*f6dc9357SAndroid Build Coastguard Worker }
848*f6dc9357SAndroid Build Coastguard Worker
SaveWindowInfo(HWND aWnd)849*f6dc9357SAndroid Build Coastguard Worker static void SaveWindowInfo(HWND aWnd)
850*f6dc9357SAndroid Build Coastguard Worker {
851*f6dc9357SAndroid Build Coastguard Worker CWindowInfo info;
852*f6dc9357SAndroid Build Coastguard Worker
853*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
854*f6dc9357SAndroid Build Coastguard Worker
855*f6dc9357SAndroid Build Coastguard Worker if (!::GetWindowRect(aWnd, &info.rect))
856*f6dc9357SAndroid Build Coastguard Worker return;
857*f6dc9357SAndroid Build Coastguard Worker info.maximized = g_Maximized;
858*f6dc9357SAndroid Build Coastguard Worker
859*f6dc9357SAndroid Build Coastguard Worker #else
860*f6dc9357SAndroid Build Coastguard Worker
861*f6dc9357SAndroid Build Coastguard Worker WINDOWPLACEMENT placement;
862*f6dc9357SAndroid Build Coastguard Worker placement.length = sizeof(placement);
863*f6dc9357SAndroid Build Coastguard Worker if (!::GetWindowPlacement(aWnd, &placement))
864*f6dc9357SAndroid Build Coastguard Worker return;
865*f6dc9357SAndroid Build Coastguard Worker info.rect = placement.rcNormalPosition;
866*f6dc9357SAndroid Build Coastguard Worker info.maximized = BOOLToBool(::IsZoomed(aWnd));
867*f6dc9357SAndroid Build Coastguard Worker
868*f6dc9357SAndroid Build Coastguard Worker #endif
869*f6dc9357SAndroid Build Coastguard Worker
870*f6dc9357SAndroid Build Coastguard Worker info.numPanels = g_App.NumPanels;
871*f6dc9357SAndroid Build Coastguard Worker info.currentPanel = g_App.LastFocusedPanel;
872*f6dc9357SAndroid Build Coastguard Worker info.splitterPos = (unsigned)g_Splitter.GetPos();
873*f6dc9357SAndroid Build Coastguard Worker
874*f6dc9357SAndroid Build Coastguard Worker info.Save();
875*f6dc9357SAndroid Build Coastguard Worker }
876*f6dc9357SAndroid Build Coastguard Worker
ExecuteCommand(UINT commandID)877*f6dc9357SAndroid Build Coastguard Worker static void ExecuteCommand(UINT commandID)
878*f6dc9357SAndroid Build Coastguard Worker {
879*f6dc9357SAndroid Build Coastguard Worker CPanel::CDisableTimerProcessing disableTimerProcessing1(g_App.Panels[0]);
880*f6dc9357SAndroid Build Coastguard Worker CPanel::CDisableTimerProcessing disableTimerProcessing2(g_App.Panels[1]);
881*f6dc9357SAndroid Build Coastguard Worker
882*f6dc9357SAndroid Build Coastguard Worker switch (commandID)
883*f6dc9357SAndroid Build Coastguard Worker {
884*f6dc9357SAndroid Build Coastguard Worker case kMenuCmdID_Toolbar_Add: g_App.AddToArchive(); break;
885*f6dc9357SAndroid Build Coastguard Worker case kMenuCmdID_Toolbar_Extract: g_App.ExtractArchives(); break;
886*f6dc9357SAndroid Build Coastguard Worker case kMenuCmdID_Toolbar_Test: g_App.TestArchives(); break;
887*f6dc9357SAndroid Build Coastguard Worker }
888*f6dc9357SAndroid Build Coastguard Worker }
889*f6dc9357SAndroid Build Coastguard Worker
WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)890*f6dc9357SAndroid Build Coastguard Worker LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
891*f6dc9357SAndroid Build Coastguard Worker {
892*f6dc9357SAndroid Build Coastguard Worker switch (message)
893*f6dc9357SAndroid Build Coastguard Worker {
894*f6dc9357SAndroid Build Coastguard Worker case WM_COMMAND:
895*f6dc9357SAndroid Build Coastguard Worker {
896*f6dc9357SAndroid Build Coastguard Worker unsigned wmId = LOWORD(wParam);
897*f6dc9357SAndroid Build Coastguard Worker unsigned wmEvent = HIWORD(wParam);
898*f6dc9357SAndroid Build Coastguard Worker if ((HWND) lParam != NULL && wmEvent != 0)
899*f6dc9357SAndroid Build Coastguard Worker break;
900*f6dc9357SAndroid Build Coastguard Worker if (wmId >= kMenuCmdID_Toolbar_Start && wmId < kMenuCmdID_Toolbar_End)
901*f6dc9357SAndroid Build Coastguard Worker {
902*f6dc9357SAndroid Build Coastguard Worker ExecuteCommand(wmId);
903*f6dc9357SAndroid Build Coastguard Worker return 0;
904*f6dc9357SAndroid Build Coastguard Worker }
905*f6dc9357SAndroid Build Coastguard Worker if (OnMenuCommand(hWnd, wmId))
906*f6dc9357SAndroid Build Coastguard Worker return 0;
907*f6dc9357SAndroid Build Coastguard Worker break;
908*f6dc9357SAndroid Build Coastguard Worker }
909*f6dc9357SAndroid Build Coastguard Worker case WM_INITMENUPOPUP:
910*f6dc9357SAndroid Build Coastguard Worker OnMenuActivating(hWnd, HMENU(wParam), LOWORD(lParam));
911*f6dc9357SAndroid Build Coastguard Worker break;
912*f6dc9357SAndroid Build Coastguard Worker
913*f6dc9357SAndroid Build Coastguard Worker /*
914*f6dc9357SAndroid Build Coastguard Worker It doesn't help
915*f6dc9357SAndroid Build Coastguard Worker case WM_EXITMENULOOP:
916*f6dc9357SAndroid Build Coastguard Worker {
917*f6dc9357SAndroid Build Coastguard Worker OnMenuUnActivating(hWnd);
918*f6dc9357SAndroid Build Coastguard Worker break;
919*f6dc9357SAndroid Build Coastguard Worker }
920*f6dc9357SAndroid Build Coastguard Worker case WM_UNINITMENUPOPUP:
921*f6dc9357SAndroid Build Coastguard Worker OnMenuUnActivating(hWnd, HMENU(wParam), lParam);
922*f6dc9357SAndroid Build Coastguard Worker break;
923*f6dc9357SAndroid Build Coastguard Worker */
924*f6dc9357SAndroid Build Coastguard Worker
925*f6dc9357SAndroid Build Coastguard Worker case WM_CREATE:
926*f6dc9357SAndroid Build Coastguard Worker {
927*f6dc9357SAndroid Build Coastguard Worker g_HWND = hWnd;
928*f6dc9357SAndroid Build Coastguard Worker /*
929*f6dc9357SAndroid Build Coastguard Worker INITCOMMONCONTROLSEX icex;
930*f6dc9357SAndroid Build Coastguard Worker icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
931*f6dc9357SAndroid Build Coastguard Worker icex.dwICC = ICC_BAR_CLASSES;
932*f6dc9357SAndroid Build Coastguard Worker InitCommonControlsEx(&icex);
933*f6dc9357SAndroid Build Coastguard Worker
934*f6dc9357SAndroid Build Coastguard Worker // Toolbar buttons used to create the first 4 buttons.
935*f6dc9357SAndroid Build Coastguard Worker TBBUTTON tbb [ ] =
936*f6dc9357SAndroid Build Coastguard Worker {
937*f6dc9357SAndroid Build Coastguard Worker // {0, 0, TBSTATE_ENABLED, BTNS_SEP, 0L, 0},
938*f6dc9357SAndroid Build Coastguard Worker // {VIEW_PARENTFOLDER, kParentFolderID, TBSTATE_ENABLED, BTNS_BUTTON, 0L, 0},
939*f6dc9357SAndroid Build Coastguard Worker // {0, 0, TBSTATE_ENABLED, BTNS_SEP, 0L, 0},
940*f6dc9357SAndroid Build Coastguard Worker {VIEW_NEWFOLDER, ID_FILE_CREATEFOLDER, TBSTATE_ENABLED, BTNS_BUTTON, 0L, 0},
941*f6dc9357SAndroid Build Coastguard Worker };
942*f6dc9357SAndroid Build Coastguard Worker
943*f6dc9357SAndroid Build Coastguard Worker int baseID = 100;
944*f6dc9357SAndroid Build Coastguard Worker NWindows::NControl::CToolBar aToolBar;
945*f6dc9357SAndroid Build Coastguard Worker aToolBar.Attach(::CreateToolbarEx (hWnd,
946*f6dc9357SAndroid Build Coastguard Worker WS_CHILD | WS_BORDER | WS_VISIBLE | TBSTYLE_TOOLTIPS, // | TBSTYLE_FLAT
947*f6dc9357SAndroid Build Coastguard Worker baseID + 2, 11,
948*f6dc9357SAndroid Build Coastguard Worker (HINSTANCE)HINST_COMMCTRL, IDB_VIEW_SMALL_COLOR,
949*f6dc9357SAndroid Build Coastguard Worker (LPCTBBUTTON)&tbb, Z7_ARRAY_SIZE(tbb),
950*f6dc9357SAndroid Build Coastguard Worker 0, 0, 100, 30, sizeof (TBBUTTON)));
951*f6dc9357SAndroid Build Coastguard Worker */
952*f6dc9357SAndroid Build Coastguard Worker // HCURSOR cursor = ::LoadCursor(0, IDC_SIZEWE);
953*f6dc9357SAndroid Build Coastguard Worker // ::SetCursor(cursor);
954*f6dc9357SAndroid Build Coastguard Worker
955*f6dc9357SAndroid Build Coastguard Worker if (g_PanelsInfoDefined)
956*f6dc9357SAndroid Build Coastguard Worker g_Splitter.SetPos(hWnd, (int)g_SplitterPos);
957*f6dc9357SAndroid Build Coastguard Worker else
958*f6dc9357SAndroid Build Coastguard Worker {
959*f6dc9357SAndroid Build Coastguard Worker g_Splitter.SetRatio(hWnd, kSplitterRateMax / 2);
960*f6dc9357SAndroid Build Coastguard Worker g_SplitterPos = (unsigned)g_Splitter.GetPos();
961*f6dc9357SAndroid Build Coastguard Worker }
962*f6dc9357SAndroid Build Coastguard Worker
963*f6dc9357SAndroid Build Coastguard Worker RECT rect;
964*f6dc9357SAndroid Build Coastguard Worker ::GetClientRect(hWnd, &rect);
965*f6dc9357SAndroid Build Coastguard Worker const int xSize = rect.right;
966*f6dc9357SAndroid Build Coastguard Worker int xSizes[2];
967*f6dc9357SAndroid Build Coastguard Worker xSizes[0] = g_Splitter.GetPos();
968*f6dc9357SAndroid Build Coastguard Worker xSizes[1] = xSize - kSplitterWidth - xSizes[0];
969*f6dc9357SAndroid Build Coastguard Worker if (xSizes[1] < 0)
970*f6dc9357SAndroid Build Coastguard Worker xSizes[1] = 0;
971*f6dc9357SAndroid Build Coastguard Worker
972*f6dc9357SAndroid Build Coastguard Worker g_App.CreateDragTarget();
973*f6dc9357SAndroid Build Coastguard Worker
974*f6dc9357SAndroid Build Coastguard Worker COpenResult openRes;
975*f6dc9357SAndroid Build Coastguard Worker bool needOpenArc = false;
976*f6dc9357SAndroid Build Coastguard Worker
977*f6dc9357SAndroid Build Coastguard Worker UString fullPath = g_MainPath;
978*f6dc9357SAndroid Build Coastguard Worker if (!fullPath.IsEmpty() /* && g_OpenArchive */)
979*f6dc9357SAndroid Build Coastguard Worker {
980*f6dc9357SAndroid Build Coastguard Worker if (!NFile::NName::IsAbsolutePath(fullPath))
981*f6dc9357SAndroid Build Coastguard Worker {
982*f6dc9357SAndroid Build Coastguard Worker FString fullPathF;
983*f6dc9357SAndroid Build Coastguard Worker if (NFile::NName::GetFullPath(us2fs(fullPath), fullPathF))
984*f6dc9357SAndroid Build Coastguard Worker fullPath = fs2us(fullPathF);
985*f6dc9357SAndroid Build Coastguard Worker }
986*f6dc9357SAndroid Build Coastguard Worker if (NFile::NFind::DoesFileExist_FollowLink(us2fs(fullPath)))
987*f6dc9357SAndroid Build Coastguard Worker needOpenArc = true;
988*f6dc9357SAndroid Build Coastguard Worker }
989*f6dc9357SAndroid Build Coastguard Worker
990*f6dc9357SAndroid Build Coastguard Worker HRESULT res = g_App.Create(hWnd, fullPath, g_ArcFormat, xSizes,
991*f6dc9357SAndroid Build Coastguard Worker needOpenArc,
992*f6dc9357SAndroid Build Coastguard Worker openRes);
993*f6dc9357SAndroid Build Coastguard Worker
994*f6dc9357SAndroid Build Coastguard Worker if (res == E_ABORT)
995*f6dc9357SAndroid Build Coastguard Worker return -1;
996*f6dc9357SAndroid Build Coastguard Worker
997*f6dc9357SAndroid Build Coastguard Worker if ((needOpenArc && !openRes.ArchiveIsOpened) || res != S_OK)
998*f6dc9357SAndroid Build Coastguard Worker {
999*f6dc9357SAndroid Build Coastguard Worker UString m ("Error");
1000*f6dc9357SAndroid Build Coastguard Worker if (res == S_FALSE || res == S_OK)
1001*f6dc9357SAndroid Build Coastguard Worker {
1002*f6dc9357SAndroid Build Coastguard Worker m = MyFormatNew(openRes.Encrypted ?
1003*f6dc9357SAndroid Build Coastguard Worker IDS_CANT_OPEN_ENCRYPTED_ARCHIVE :
1004*f6dc9357SAndroid Build Coastguard Worker IDS_CANT_OPEN_ARCHIVE,
1005*f6dc9357SAndroid Build Coastguard Worker fullPath);
1006*f6dc9357SAndroid Build Coastguard Worker }
1007*f6dc9357SAndroid Build Coastguard Worker else if (res != S_OK)
1008*f6dc9357SAndroid Build Coastguard Worker m = HResultToMessage(res);
1009*f6dc9357SAndroid Build Coastguard Worker if (!openRes.ErrorMessage.IsEmpty())
1010*f6dc9357SAndroid Build Coastguard Worker {
1011*f6dc9357SAndroid Build Coastguard Worker m.Add_LF();
1012*f6dc9357SAndroid Build Coastguard Worker m += openRes.ErrorMessage;
1013*f6dc9357SAndroid Build Coastguard Worker }
1014*f6dc9357SAndroid Build Coastguard Worker ErrorMessage(m);
1015*f6dc9357SAndroid Build Coastguard Worker return -1;
1016*f6dc9357SAndroid Build Coastguard Worker }
1017*f6dc9357SAndroid Build Coastguard Worker
1018*f6dc9357SAndroid Build Coastguard Worker g_WindowWasCreated = true;
1019*f6dc9357SAndroid Build Coastguard Worker
1020*f6dc9357SAndroid Build Coastguard Worker // g_SplitterPos = 0;
1021*f6dc9357SAndroid Build Coastguard Worker
1022*f6dc9357SAndroid Build Coastguard Worker // ::DragAcceptFiles(hWnd, TRUE);
1023*f6dc9357SAndroid Build Coastguard Worker RegisterDragDrop(hWnd, g_App._dropTarget);
1024*f6dc9357SAndroid Build Coastguard Worker
1025*f6dc9357SAndroid Build Coastguard Worker break;
1026*f6dc9357SAndroid Build Coastguard Worker }
1027*f6dc9357SAndroid Build Coastguard Worker
1028*f6dc9357SAndroid Build Coastguard Worker case WM_CLOSE:
1029*f6dc9357SAndroid Build Coastguard Worker {
1030*f6dc9357SAndroid Build Coastguard Worker // why do we use WA_INACTIVE here ?
1031*f6dc9357SAndroid Build Coastguard Worker SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), (LPARAM)hWnd);
1032*f6dc9357SAndroid Build Coastguard Worker g_ExitEventLauncher.Exit(false);
1033*f6dc9357SAndroid Build Coastguard Worker // ::DragAcceptFiles(hWnd, FALSE);
1034*f6dc9357SAndroid Build Coastguard Worker RevokeDragDrop(hWnd);
1035*f6dc9357SAndroid Build Coastguard Worker g_App._dropTarget.Release();
1036*f6dc9357SAndroid Build Coastguard Worker
1037*f6dc9357SAndroid Build Coastguard Worker if (g_WindowWasCreated)
1038*f6dc9357SAndroid Build Coastguard Worker g_App.Save();
1039*f6dc9357SAndroid Build Coastguard Worker
1040*f6dc9357SAndroid Build Coastguard Worker g_App.ReleaseApp();
1041*f6dc9357SAndroid Build Coastguard Worker
1042*f6dc9357SAndroid Build Coastguard Worker if (g_WindowWasCreated)
1043*f6dc9357SAndroid Build Coastguard Worker SaveWindowInfo(hWnd);
1044*f6dc9357SAndroid Build Coastguard Worker
1045*f6dc9357SAndroid Build Coastguard Worker g_ExitEventLauncher.Exit(true);
1046*f6dc9357SAndroid Build Coastguard Worker // default DefWindowProc will call DestroyWindow / WM_DESTROY
1047*f6dc9357SAndroid Build Coastguard Worker break;
1048*f6dc9357SAndroid Build Coastguard Worker }
1049*f6dc9357SAndroid Build Coastguard Worker
1050*f6dc9357SAndroid Build Coastguard Worker case WM_DESTROY:
1051*f6dc9357SAndroid Build Coastguard Worker {
1052*f6dc9357SAndroid Build Coastguard Worker PostQuitMessage(0);
1053*f6dc9357SAndroid Build Coastguard Worker break;
1054*f6dc9357SAndroid Build Coastguard Worker }
1055*f6dc9357SAndroid Build Coastguard Worker
1056*f6dc9357SAndroid Build Coastguard Worker // case WM_MOVE: break;
1057*f6dc9357SAndroid Build Coastguard Worker
1058*f6dc9357SAndroid Build Coastguard Worker case WM_LBUTTONDOWN:
1059*f6dc9357SAndroid Build Coastguard Worker g_StartCaptureMousePos = LOWORD(lParam);
1060*f6dc9357SAndroid Build Coastguard Worker g_StartCaptureSplitterPos = g_Splitter.GetPos();
1061*f6dc9357SAndroid Build Coastguard Worker ::SetCapture(hWnd);
1062*f6dc9357SAndroid Build Coastguard Worker break;
1063*f6dc9357SAndroid Build Coastguard Worker
1064*f6dc9357SAndroid Build Coastguard Worker case WM_LBUTTONUP:
1065*f6dc9357SAndroid Build Coastguard Worker {
1066*f6dc9357SAndroid Build Coastguard Worker ::ReleaseCapture();
1067*f6dc9357SAndroid Build Coastguard Worker break;
1068*f6dc9357SAndroid Build Coastguard Worker }
1069*f6dc9357SAndroid Build Coastguard Worker
1070*f6dc9357SAndroid Build Coastguard Worker case WM_MOUSEMOVE:
1071*f6dc9357SAndroid Build Coastguard Worker {
1072*f6dc9357SAndroid Build Coastguard Worker if ((wParam & MK_LBUTTON) != 0 && ::GetCapture() == hWnd)
1073*f6dc9357SAndroid Build Coastguard Worker {
1074*f6dc9357SAndroid Build Coastguard Worker g_Splitter.SetPos(hWnd, g_StartCaptureSplitterPos +
1075*f6dc9357SAndroid Build Coastguard Worker (short)LOWORD(lParam) - g_StartCaptureMousePos);
1076*f6dc9357SAndroid Build Coastguard Worker g_App.MoveSubWindows();
1077*f6dc9357SAndroid Build Coastguard Worker }
1078*f6dc9357SAndroid Build Coastguard Worker break;
1079*f6dc9357SAndroid Build Coastguard Worker }
1080*f6dc9357SAndroid Build Coastguard Worker
1081*f6dc9357SAndroid Build Coastguard Worker case WM_SIZE:
1082*f6dc9357SAndroid Build Coastguard Worker {
1083*f6dc9357SAndroid Build Coastguard Worker if (g_CanChangeSplitter)
1084*f6dc9357SAndroid Build Coastguard Worker g_Splitter.SetPosFromRatio(hWnd);
1085*f6dc9357SAndroid Build Coastguard Worker else
1086*f6dc9357SAndroid Build Coastguard Worker {
1087*f6dc9357SAndroid Build Coastguard Worker g_Splitter.SetPos(hWnd, (int)g_SplitterPos );
1088*f6dc9357SAndroid Build Coastguard Worker g_CanChangeSplitter = true;
1089*f6dc9357SAndroid Build Coastguard Worker }
1090*f6dc9357SAndroid Build Coastguard Worker
1091*f6dc9357SAndroid Build Coastguard Worker g_Maximized = (wParam == SIZE_MAXIMIZED) || (wParam == SIZE_MAXSHOW);
1092*f6dc9357SAndroid Build Coastguard Worker
1093*f6dc9357SAndroid Build Coastguard Worker g_App.MoveSubWindows();
1094*f6dc9357SAndroid Build Coastguard Worker /*
1095*f6dc9357SAndroid Build Coastguard Worker int xSize = LOWORD(lParam);
1096*f6dc9357SAndroid Build Coastguard Worker int ySize = HIWORD(lParam);
1097*f6dc9357SAndroid Build Coastguard Worker // int xSplitter = 2;
1098*f6dc9357SAndroid Build Coastguard Worker int xWidth = g_SplitPos;
1099*f6dc9357SAndroid Build Coastguard Worker // int xSplitPos = xWidth;
1100*f6dc9357SAndroid Build Coastguard Worker g_Panel[0]._listView.MoveWindow(0, 0, xWidth, ySize);
1101*f6dc9357SAndroid Build Coastguard Worker g_Panel[1]._listView.MoveWindow(xSize - xWidth, 0, xWidth, ySize);
1102*f6dc9357SAndroid Build Coastguard Worker */
1103*f6dc9357SAndroid Build Coastguard Worker return 0;
1104*f6dc9357SAndroid Build Coastguard Worker // break;
1105*f6dc9357SAndroid Build Coastguard Worker }
1106*f6dc9357SAndroid Build Coastguard Worker
1107*f6dc9357SAndroid Build Coastguard Worker case WM_SETFOCUS:
1108*f6dc9357SAndroid Build Coastguard Worker // g_App.SetFocus(g_App.LastFocusedPanel);
1109*f6dc9357SAndroid Build Coastguard Worker g_App.SetFocusToLastItem();
1110*f6dc9357SAndroid Build Coastguard Worker break;
1111*f6dc9357SAndroid Build Coastguard Worker
1112*f6dc9357SAndroid Build Coastguard Worker /*
1113*f6dc9357SAndroid Build Coastguard Worker case WM_ACTIVATE:
1114*f6dc9357SAndroid Build Coastguard Worker {
1115*f6dc9357SAndroid Build Coastguard Worker int fActive = LOWORD(wParam);
1116*f6dc9357SAndroid Build Coastguard Worker switch (fActive)
1117*f6dc9357SAndroid Build Coastguard Worker {
1118*f6dc9357SAndroid Build Coastguard Worker case WA_INACTIVE:
1119*f6dc9357SAndroid Build Coastguard Worker {
1120*f6dc9357SAndroid Build Coastguard Worker // g_FocusIndex = g_App.LastFocusedPanel;
1121*f6dc9357SAndroid Build Coastguard Worker // g_App.LastFocusedPanel = g_App.GetFocusedPanelIndex();
1122*f6dc9357SAndroid Build Coastguard Worker // return 0;
1123*f6dc9357SAndroid Build Coastguard Worker }
1124*f6dc9357SAndroid Build Coastguard Worker }
1125*f6dc9357SAndroid Build Coastguard Worker break;
1126*f6dc9357SAndroid Build Coastguard Worker }
1127*f6dc9357SAndroid Build Coastguard Worker */
1128*f6dc9357SAndroid Build Coastguard Worker
1129*f6dc9357SAndroid Build Coastguard Worker /*
1130*f6dc9357SAndroid Build Coastguard Worker case kLangWasChangedMessage:
1131*f6dc9357SAndroid Build Coastguard Worker MyLoadMenu();
1132*f6dc9357SAndroid Build Coastguard Worker return 0;
1133*f6dc9357SAndroid Build Coastguard Worker */
1134*f6dc9357SAndroid Build Coastguard Worker
1135*f6dc9357SAndroid Build Coastguard Worker /*
1136*f6dc9357SAndroid Build Coastguard Worker case WM_SETTINGCHANGE:
1137*f6dc9357SAndroid Build Coastguard Worker break;
1138*f6dc9357SAndroid Build Coastguard Worker */
1139*f6dc9357SAndroid Build Coastguard Worker
1140*f6dc9357SAndroid Build Coastguard Worker case WM_NOTIFY:
1141*f6dc9357SAndroid Build Coastguard Worker {
1142*f6dc9357SAndroid Build Coastguard Worker g_App.OnNotify((int)wParam, (LPNMHDR)lParam);
1143*f6dc9357SAndroid Build Coastguard Worker break;
1144*f6dc9357SAndroid Build Coastguard Worker }
1145*f6dc9357SAndroid Build Coastguard Worker
1146*f6dc9357SAndroid Build Coastguard Worker /*
1147*f6dc9357SAndroid Build Coastguard Worker case WM_DROPFILES:
1148*f6dc9357SAndroid Build Coastguard Worker {
1149*f6dc9357SAndroid Build Coastguard Worker g_App.GetFocusedPanel().CompressDropFiles((HDROP)wParam);
1150*f6dc9357SAndroid Build Coastguard Worker return 0 ;
1151*f6dc9357SAndroid Build Coastguard Worker }
1152*f6dc9357SAndroid Build Coastguard Worker */
1153*f6dc9357SAndroid Build Coastguard Worker }
1154*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
1155*f6dc9357SAndroid Build Coastguard Worker if (g_IsNT)
1156*f6dc9357SAndroid Build Coastguard Worker return DefWindowProcW(hWnd, message, wParam, lParam);
1157*f6dc9357SAndroid Build Coastguard Worker else
1158*f6dc9357SAndroid Build Coastguard Worker #endif
1159*f6dc9357SAndroid Build Coastguard Worker return DefWindowProc(hWnd, message, wParam, lParam);
1160*f6dc9357SAndroid Build Coastguard Worker
1161*f6dc9357SAndroid Build Coastguard Worker }
1162*f6dc9357SAndroid Build Coastguard Worker
Window_GetRealHeight(NWindows::CWindow & w)1163*f6dc9357SAndroid Build Coastguard Worker static int Window_GetRealHeight(NWindows::CWindow &w)
1164*f6dc9357SAndroid Build Coastguard Worker {
1165*f6dc9357SAndroid Build Coastguard Worker RECT rect;
1166*f6dc9357SAndroid Build Coastguard Worker w.GetWindowRect(&rect);
1167*f6dc9357SAndroid Build Coastguard Worker int res = RECT_SIZE_Y(rect);
1168*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
1169*f6dc9357SAndroid Build Coastguard Worker WINDOWPLACEMENT placement;
1170*f6dc9357SAndroid Build Coastguard Worker if (w.GetPlacement(&placement))
1171*f6dc9357SAndroid Build Coastguard Worker res += placement.rcNormalPosition.top;
1172*f6dc9357SAndroid Build Coastguard Worker #endif
1173*f6dc9357SAndroid Build Coastguard Worker return res;
1174*f6dc9357SAndroid Build Coastguard Worker }
1175*f6dc9357SAndroid Build Coastguard Worker
MoveSubWindows()1176*f6dc9357SAndroid Build Coastguard Worker void CApp::MoveSubWindows()
1177*f6dc9357SAndroid Build Coastguard Worker {
1178*f6dc9357SAndroid Build Coastguard Worker HWND hWnd = _window;
1179*f6dc9357SAndroid Build Coastguard Worker RECT rect;
1180*f6dc9357SAndroid Build Coastguard Worker if (!hWnd)
1181*f6dc9357SAndroid Build Coastguard Worker return;
1182*f6dc9357SAndroid Build Coastguard Worker ::GetClientRect(hWnd, &rect);
1183*f6dc9357SAndroid Build Coastguard Worker int xSize = rect.right;
1184*f6dc9357SAndroid Build Coastguard Worker if (xSize == 0)
1185*f6dc9357SAndroid Build Coastguard Worker return;
1186*f6dc9357SAndroid Build Coastguard Worker int headerSize = 0;
1187*f6dc9357SAndroid Build Coastguard Worker
1188*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
1189*f6dc9357SAndroid Build Coastguard Worker _commandBar.AutoSize();
1190*f6dc9357SAndroid Build Coastguard Worker {
1191*f6dc9357SAndroid Build Coastguard Worker _commandBar.Show(true); // maybe we need it for
1192*f6dc9357SAndroid Build Coastguard Worker headerSize += _commandBar.Height();
1193*f6dc9357SAndroid Build Coastguard Worker }
1194*f6dc9357SAndroid Build Coastguard Worker #endif
1195*f6dc9357SAndroid Build Coastguard Worker
1196*f6dc9357SAndroid Build Coastguard Worker if (_toolBar)
1197*f6dc9357SAndroid Build Coastguard Worker {
1198*f6dc9357SAndroid Build Coastguard Worker _toolBar.AutoSize();
1199*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
1200*f6dc9357SAndroid Build Coastguard Worker int h2 = Window_GetRealHeight(_toolBar);
1201*f6dc9357SAndroid Build Coastguard Worker _toolBar.Move(0, headerSize, xSize, h2);
1202*f6dc9357SAndroid Build Coastguard Worker #endif
1203*f6dc9357SAndroid Build Coastguard Worker headerSize += Window_GetRealHeight(_toolBar);
1204*f6dc9357SAndroid Build Coastguard Worker }
1205*f6dc9357SAndroid Build Coastguard Worker
1206*f6dc9357SAndroid Build Coastguard Worker int ySize = MyMax((int)(rect.bottom - headerSize), 0);
1207*f6dc9357SAndroid Build Coastguard Worker
1208*f6dc9357SAndroid Build Coastguard Worker if (NumPanels > 1)
1209*f6dc9357SAndroid Build Coastguard Worker {
1210*f6dc9357SAndroid Build Coastguard Worker Panels[0].Move(0, headerSize, g_Splitter.GetPos(), ySize);
1211*f6dc9357SAndroid Build Coastguard Worker int xWidth1 = g_Splitter.GetPos() + kSplitterWidth;
1212*f6dc9357SAndroid Build Coastguard Worker Panels[1].Move(xWidth1, headerSize, xSize - xWidth1, ySize);
1213*f6dc9357SAndroid Build Coastguard Worker }
1214*f6dc9357SAndroid Build Coastguard Worker else
1215*f6dc9357SAndroid Build Coastguard Worker {
1216*f6dc9357SAndroid Build Coastguard Worker /*
1217*f6dc9357SAndroid Build Coastguard Worker int otherPanel = 1 - LastFocusedPanel;
1218*f6dc9357SAndroid Build Coastguard Worker if (PanelsCreated[otherPanel])
1219*f6dc9357SAndroid Build Coastguard Worker Panels[otherPanel].Move(0, headerSize, 0, ySize);
1220*f6dc9357SAndroid Build Coastguard Worker */
1221*f6dc9357SAndroid Build Coastguard Worker Panels[LastFocusedPanel].Move(0, headerSize, xSize, ySize);
1222*f6dc9357SAndroid Build Coastguard Worker }
1223*f6dc9357SAndroid Build Coastguard Worker }
1224