2 * Copyright 2003 Martin Fuchs
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 // Martin Fuchs, 23.07.2003
27 // Credits: Thanks to Leon Finker for his explorer window example
31 #include "utility/utility.h"
34 #include "desktop/desktop.h"
37 #include "externals.h"
39 #include "explorer_intres.h"
44 ExplorerGlobals g_Globals;
47 ExplorerGlobals::ExplorerGlobals()
53 _prescan_nodes = false;
54 _desktop_mode = false;
58 ResString::ResString(UINT nid)
60 TCHAR buffer[BUFFER_LEN];
62 int len = LoadString(g_Globals._hInstance, nid, buffer, sizeof(buffer)/sizeof(TCHAR));
68 ResIcon::ResIcon(UINT nid)
70 _hIcon = LoadIcon(g_Globals._hInstance, MAKEINTRESOURCE(nid));
73 SmallIcon::SmallIcon(UINT nid)
75 _hIcon = (HICON)LoadImage(g_Globals._hInstance, MAKEINTRESOURCE(nid), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
79 ResBitmap::ResBitmap(UINT nid)
81 _hBmp = LoadBitmap(g_Globals._hInstance, MAKEINTRESOURCE(nid));
85 void explorer_show_frame(HWND hwndDesktop, int cmdshow)
87 if (g_Globals._hMainWnd)
90 g_Globals._prescan_nodes = false;
93 HWND hMainFrame = MainFrame::Create();
96 g_Globals._hMainWnd = hMainFrame;
98 ShowWindow(hMainFrame, cmdshow);
99 UpdateWindow(hMainFrame);
101 // Open the first child window after initializing the whole application
102 PostMessage(hMainFrame, PM_OPEN_WINDOW, TRUE/*mode_explore*/, 0);
107 static void InitInstance(HINSTANCE hInstance)
109 setlocale(LC_COLLATE, ""); // set collating rules to local settings for compareName
111 // register frame window class
112 g_Globals._hframeClass = IconWindowClass(CLASSNAME_FRAME,IDI_EXPLORER);
114 // register child windows class
115 WindowClass(CLASSNAME_CHILDWND, CS_CLASSDC|CS_DBLCLKS|CS_VREDRAW).Register();
117 // register tree windows class
118 WindowClass(CLASSNAME_WINEFILETREE, CS_CLASSDC|CS_DBLCLKS|CS_VREDRAW).Register();
120 g_Globals._cfStrFName = RegisterClipboardFormat(CFSTR_FILENAME);
124 int explorer_main(HINSTANCE hInstance, HWND hwndDesktop, int cmdshow)
126 // initialize COM and OLE
129 // initialize Common Controls library
130 CommonControlInit usingCmnCtrl;
133 InitInstance(hInstance);
134 } catch(COMException& e) {
135 HandleException(e, g_Globals._hMainWnd);
140 g_Globals._desktop_mode = true;
142 if (cmdshow != SW_HIDE) {
143 /* // don't maximize if being called from the ROS desktop
144 if (cmdshow == SW_SHOWNORMAL)
145 //TODO: read window placement from registry
146 cmdshow = SW_MAXIMIZE;
149 explorer_show_frame(hwndDesktop, cmdshow);
152 return Window::MessageLoop();
156 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
158 // create desktop window and task bar only, if there is no other shell and we are
159 // the first explorer instance
160 BOOL startup_desktop = !IsAnyDesktopRunning();
162 // If there is given the command line option "-desktop", create desktop window anyways
163 if (!lstrcmp(lpCmdLine,TEXT("-desktop")))
164 startup_desktop = TRUE;
166 if (!lstrcmp(lpCmdLine,TEXT("-noexplorer"))) {
168 startup_desktop = TRUE;
171 g_Globals._hInstance = hInstance;
173 HWND hwndDesktop = 0;
177 hwndDesktop = DesktopWindow::Create();
179 #ifndef _DEBUG //MF: disabled for debugging
187 int ret = explorer_main(hInstance, hwndDesktop, nShowCmd);