ReactOS 0.4.17-dev-940-g8bd6e85
CMainWnd.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Management Console
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Main window class
5 * COPYRIGHT: Copyright 2006-2007 Thomas Weidenmueller
6 * Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
7 * Copyright 2026 Eric Kohl (eric.kohl@reactos.org)
8 */
9
10#pragma once
11
12/* Toolbar Button Indices */
13#define BTN_UNDO 0
14#define BTN_REDO 1
15#define BTN_UP 2
16#define BTN_SCOPE_PANE 3
17#define BTN_EXPORT_LIST 4
18#define BTN_HELP 5
19#define BTN_ACTIONS_PANE 6
20
21#define MAX_RECENT_FILES 4
22
23class CMainWnd :
24 public CWindowImpl<CMainWnd>
25{
26private:
27 CWndProcThunk m_FrameThunk;
28
30 CAtlString m_ConsoleTitle;
36
42
45
46 CAtlList<CConsoleWnd*> m_ViewList;
48
50
51 CAtlList<CRecentFileEntry *> m_RecentFilesList;
52
53public:
54 CWindow m_MDIClient;
55 CAtlString m_Filename;
56
57public:
58
65
77
79
84
86
89
92
93 static CWndClassInfo& GetWndClassInfo()
94 {
95 static CWndClassInfo wc =
96 {
97 {
98 /* cbSize= */sizeof(WNDCLASSEX),
99 /* style= */0,
100 /* lpfnWndProc= */StartWindowProc,
101 /* cbClsExtra= */0,
102 /* cbWndExtra= */0,
103 /* hInstance= */NULL,
104 /* hIcon= */LoadIcon(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCE(IDI_MAINAPP)),
105 /* hCursor= */NULL,
106 /* hbrBackground= */(HBRUSH)(COLOR_BTNFACE + 1),
107 /* lpszMenuName= */NULL,
108 /* lpszClassName= */TEXT("MMCMainFrame"),
109 /* hIconSm= */LoadIcon(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCE(IDI_MAINAPP))
110 },
111 NULL, NULL, IDC_ARROW, TRUE, 0, L""
112 };
113 return wc;
114 }
115
117 {
118 return GetWndClassInfo().m_wc.lpszClassName;
119 }
120
122 {
123 CMainWnd* pThis = reinterpret_cast<CMainWnd*>(hWnd);
124 return ::DefFrameProc(pThis->m_hWnd, pThis->m_MDIClient.m_hWnd, uMsg, wParam, lParam);
125 }
126
127private:
128
130 {
131 if (m_ViewList.IsEmpty())
133 else
136 }
137
139 {
140 if (m_ViewList.IsEmpty())
141 m_ConsoleTitle.LoadString(IDS_APPTITLE);
142 else
144 SetWindowTextW(m_ConsoleTitle.GetString());
145 }
146
148 {
149 HWND hWndMDIChild;
150
151 hWndMDIChild = (HWND)m_MDIClient.SendMessage(WM_MDIGETACTIVE, 0, 0);
152 if (hWndMDIChild == NULL)
153 return NULL;
154
155 return (CConsoleWnd*)::GetWindowLongPtr(hWndMDIChild, 0);
156 }
157
158 void CreateNewConsoleTitle(CAtlString& str)
159 {
161 str.LoadString(IDS_CONSOLETITLE);
162
163 LPTSTR lpTarget = NULL;
165 str.GetString(), 0, 0, (LPTSTR)&lpTarget, 0, (va_list*)args);
166
167 if (Ret)
168 {
169 str = lpTarget;
170 LocalFree(lpTarget);
171 }
172 }
173
174
175public:
176 CMainWnd();
177 ~CMainWnd();
178
179 LRESULT OnCreate(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
180 LRESULT OnSize(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
181 LRESULT OnCloseChild(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
182 LRESULT OnDestroy(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
183 LRESULT OnClose(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
184
185 LRESULT OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
186 LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
187 LRESULT OnFileSave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
188 LRESULT OnFileSaveAs(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
189 LRESULT OnFileAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
190 LRESULT OnFileOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
191 LRESULT OnFileRecent(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
192 LRESULT OnFileExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
193 LRESULT OnViewCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
194 LRESULT OnWindowsNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
195 LRESULT OnWindowsCascade(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
196 LRESULT OnWindowsTile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
197 LRESULT OnWindowsArrange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
198 LRESULT OnHelpAboutMMC(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
199 LRESULT OnToolbarScopePane(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
200 LRESULT OnToolbarActionsPane(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
201 LRESULT OnMDIForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
202
203private:
205 void UpdateLayout();
206 void UpdateViews();
207
210 VOID AddToRecentFiles(const CAtlString &FileName);
213 LRESULT SaveMscFile(const CAtlString &FileName);
214 LRESULT LoadMscFile(const CAtlString &FileName);
215
216public:
217 CAtlString *GetConsoleTitle();
218 void SetConsoleTitle(CAtlString consoleTitle);
220 VOID SetToolBarVisible(BOOL bVisible);
223
228
230
231 int RegisterView(CConsoleWnd *pView);
232 void UnregisterView(CConsoleWnd *pView);
234 void SetDocumentMode(DOCUMENT_MODE DocumentMode);
236 void SetLogicalReadOnly(BOOL LogicalReadOnly);
238 void SetPreventViewCustomization(BOOL PreventCustomization);
239};
240
HWND hWnd
Definition: settings.c:17
#define WM_USER_CLOSE_CHILD
Definition: precomp.h:14
#define IDI_MAINAPP
Definition: resource.h:6
#define IDM_FILE_NEW
Definition: resource.h:11
#define IDM_FILE_OPEN
Definition: resource.h:12
#define IDM_FILE_SAVE
Definition: resource.h:13
#define IDM_MDI_FIRSTCHILD
Definition: resource.h:19
#define IDS_CONSOLETITLE
Definition: resource.h:4
#define IDM_FILE_SAVEAS
Definition: resource.h:14
#define IDM_FILE_EXIT
Definition: resource.h:15
#define IDS_APPTITLE
Definition: resource.h:3
enum _DOCUMENT_MODE DOCUMENT_MODE
#define IDM_FILE_ADD
Definition: resource.h:30
#define IDM_FILE_RECENT1
Definition: resource.h:32
#define IDM_WINDOWS_ARRANGE
Definition: resource.h:56
#define IDM_FILE_OPTIONS
Definition: resource.h:31
#define IDM_VIEW_CUSTOMIZE
Definition: resource.h:48
#define IDM_WINDOWS_TILE
Definition: resource.h:55
#define IDM_TB_ACTIONS_PANE
Definition: resource.h:68
#define IDM_HELP_ABOUT_MMC
Definition: resource.h:59
#define IDM_WINDOWS_NEW
Definition: resource.h:53
#define IDM_FILE_RECENT3
Definition: resource.h:34
#define IDM_FILE_RECENT4
Definition: resource.h:35
#define IDM_WINDOWS_CASCADE
Definition: resource.h:54
#define IDM_TB_SCOPE_PANE
Definition: resource.h:66
#define IDM_FILE_RECENT2
Definition: resource.h:33
LRESULT OnFileRecent(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:325
CMainWnd()
Definition: CMainWnd.cpp:26
void SetPreventViewCustomization(BOOL PreventCustomization)
Definition: CMainWnd.cpp:649
CWndProcThunk m_FrameThunk
Definition: CMainWnd.h:27
BOOL GetPreventViewCustomization()
Definition: CMainWnd.cpp:643
LRESULT OnFileExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:344
LRESULT OnWindowsCascade(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:391
void UpdateViews()
Definition: CMainWnd.cpp:577
LRESULT OnDestroy(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CMainWnd.cpp:129
CAtlString m_ConsoleTitle
Definition: CMainWnd.h:30
HIMAGELIST m_hToolBarImageList
Definition: CMainWnd.h:40
BOOL GetLogicalReadOnly()
Definition: CMainWnd.cpp:631
static LRESULT CALLBACK XDefFrameProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CMainWnd.h:121
LPWSTR ProgramModeToString()
Definition: CMainWnd.cpp:790
CAtlString * GetConsoleTitle()
Definition: CMainWnd.cpp:463
int m_ConsoleNumber
Definition: CMainWnd.h:29
int RegisterView(CConsoleWnd *pView)
Definition: CMainWnd.cpp:562
VOID SetToolBarVisible(BOOL bVisible)
Definition: CMainWnd.cpp:481
VOID AddToRecentFiles(const CAtlString &FileName)
Definition: CMainWnd.cpp:726
int GetSnapinCacheCount()
Definition: CMainWnd.cpp:526
CAtlList< CRecentFileEntry * > m_RecentFilesList
Definition: CMainWnd.h:51
VOID LoadRecentFiles()
Definition: CMainWnd.cpp:693
LRESULT OnFileAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:299
LRESULT OnFileOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:314
LRESULT OnWindowsNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:363
LRESULT OnCreate(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CMainWnd.cpp:72
void UpdateLayout()
Definition: CMainWnd.cpp:593
BOOL IsToolBarVisible()
Definition: CMainWnd.cpp:475
CSnapin * GetRootSnapin()
Definition: CMainWnd.cpp:556
~CMainWnd()
Definition: CMainWnd.cpp:62
void CreateNewConsoleTitle(CAtlString &str)
Definition: CMainWnd.h:158
DWORD CreateNewFilename(PWSTR pBuffer, DWORD dwSize, DWORD Number)
Definition: CMainWnd.cpp:778
int m_NextViewId
Definition: CMainWnd.h:47
CWindow m_MDIClient
Definition: CMainWnd.h:54
LRESULT LoadMscFile(const CAtlString &FileName)
Definition: CMainWnd.cpp:910
void UpdateMenu()
Definition: CMainWnd.h:129
HMENU m_hMenuConsoleSmall
Definition: CMainWnd.h:31
CSnapin * m_RootNode
Definition: CMainWnd.h:49
LRESULT OnFileSaveAs(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:256
static LPCTSTR GetWndClassName()
Definition: CMainWnd.h:116
DOCUMENT_MODE GetDocumentMode()
Definition: CMainWnd.cpp:619
CSnapinCacheEntry * GetSnapinCacheEntry(int nIndex)
Definition: CMainWnd.cpp:532
HIMAGELIST SnapinImageList()
Definition: CMainWnd.cpp:550
void UnregisterView(CConsoleWnd *pView)
Definition: CMainWnd.cpp:569
void UpdateTitle()
Definition: CMainWnd.h:138
HIMAGELIST m_hSnapinImageList
Definition: CMainWnd.h:44
LRESULT LoadSnapinCache()
Definition: CMainWnd.cpp:502
CConsoleWnd * GetActiveChildInfo()
Definition: CMainWnd.h:147
LRESULT OnHelpAboutMMC(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:412
DOCUMENT_MODE m_DocumentMode
Definition: CMainWnd.h:33
void SetLogicalReadOnly(BOOL LogicalReadOnly)
Definition: CMainWnd.cpp:637
BOOL m_LogicalReadOnly
Definition: CMainWnd.h:34
VOID UpdateRecentFilesMenu()
Definition: CMainWnd.cpp:655
static CWndClassInfo & GetWndClassInfo()
Definition: CMainWnd.h:93
LRESULT OnWindowsArrange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:405
CToolbar< DWORD_PTR > m_ToolBar
Definition: CMainWnd.h:37
BOOL m_PreventViewCustomization
Definition: CMainWnd.h:35
CSimpleArray< CSnapinCacheEntry * > m_SnapinCache
Definition: CMainWnd.h:43
LRESULT OnViewCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:351
CAtlList< CConsoleWnd * > m_ViewList
Definition: CMainWnd.h:46
HMENU m_hMenuConsoleLarge
Definition: CMainWnd.h:32
BOOL m_bStandardMenusVisible
Definition: CMainWnd.h:41
LRESULT OnCloseChild(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CMainWnd.cpp:121
LRESULT OnWindowsTile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:398
VOID SetStandardMenusVisible(BOOL bVisible)
Definition: CMainWnd.cpp:494
LRESULT OnClose(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CMainWnd.cpp:137
LRESULT OnFileSave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:243
LRESULT OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:144
BOOL m_bToolBarVisible
Definition: CMainWnd.h:39
BOOL AreStandardMenusVisible()
Definition: CMainWnd.cpp:488
LRESULT OnToolbarScopePane(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:429
LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:210
LRESULT OnToolbarActionsPane(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:440
LRESULT OnSize(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CMainWnd.cpp:114
LRESULT OnMDIForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CMainWnd.cpp:451
LRESULT SaveMscFile(const CAtlString &FileName)
Definition: CMainWnd.cpp:812
CAtlString m_Filename
Definition: CMainWnd.h:55
void SetDocumentMode(DOCUMENT_MODE DocumentMode)
Definition: CMainWnd.cpp:625
CSnapinCacheEntry * GetSnapinCacheEntryByGuid(PWSTR pszGuid)
Definition: CMainWnd.cpp:538
int m_iToolBarHeight
Definition: CMainWnd.h:38
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
HANDLE HWND
Definition: compat.h:19
#define CALLBACK
Definition: compat.h:35
char * va_list
Definition: vadefs.h:50
#define L(x)
Definition: resources.c:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned int UINT
Definition: sysinfo.c:13
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define TEXT(s)
Definition: k32.h:28
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1953
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define COMMAND_RANGE_HANDLER(idFirst, idLast, func)
Definition: atlwin.h:1971
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
LPSTR LPTSTR
Definition: ms-dtyp.idl:131
LPCSTR LPCTSTR
Definition: ms-dtyp.idl:130
_In_ ULONG Number
Definition: haltypes.h:1872
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define WM_CLOSE
Definition: winuser.h:1649
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
#define WM_CREATE
Definition: winuser.h:1636
#define WM_SIZE
Definition: winuser.h:1639
#define IDC_ARROW
Definition: winuser.h:695
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define LoadIcon
Definition: winuser.h:5979
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5885
#define WM_DESTROY
Definition: winuser.h:1637
#define WM_MDIGETACTIVE
Definition: winuser.h:1849
#define COLOR_BTNFACE
Definition: winuser.h:939
PVOID pBuffer
const WCHAR * str
Definition: match.c:390
#define GetWindowLongPtr
Definition: treelist.c:73
#define DWORD_PTR
Definition: treelist.c:76
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint16_t * LPWSTR
Definition: typedefs.h:56
#define FormatMessage
Definition: winbase.h:3518
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:398
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:396
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:401
#define SetConsoleTitle
Definition: wincon.h:1052