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"
42 ExplorerGlobals g_Globals
;
45 ExplorerGlobals::ExplorerGlobals()
51 _prescan_nodes
= false;
52 _desktop_mode
= false;
56 ResString::ResString(UINT nid
)
58 TCHAR buffer
[BUFFER_LEN
];
60 int len
= LoadString(g_Globals
._hInstance
, nid
, buffer
, sizeof(buffer
)/sizeof(TCHAR
));
66 ResIcon::ResIcon(UINT nid
)
68 _hIcon
= LoadIcon(g_Globals
._hInstance
, MAKEINTRESOURCE(nid
));
71 SmallIcon::SmallIcon(UINT nid
)
73 _hIcon
= (HICON
)LoadImage(g_Globals
._hInstance
, MAKEINTRESOURCE(nid
), IMAGE_ICON
, GetSystemMetrics(SM_CXSMICON
), GetSystemMetrics(SM_CYSMICON
), LR_SHARED
);
77 ResBitmap::ResBitmap(UINT nid
)
79 _hBmp
= LoadBitmap(g_Globals
._hInstance
, MAKEINTRESOURCE(nid
));
83 void explorer_show_frame(HWND hwndDesktop
, int cmdshow
)
85 if (g_Globals
._hMainWnd
)
88 g_Globals
._prescan_nodes
= false;
91 g_Globals
._hMainWnd
= MainFrame::Create();
93 ShowWindow(g_Globals
._hMainWnd
, cmdshow
);
95 UpdateWindow(g_Globals
._hMainWnd
);
97 // Open the first child window after initialiszing the whole application
98 PostMessage(g_Globals
._hMainWnd
, PM_OPEN_WINDOW
, 0, 0);
102 static void InitInstance(HINSTANCE hInstance
)
104 setlocale(LC_COLLATE
, ""); // set collating rules to local settings for compareName
106 // register frame window class
107 g_Globals
._hframeClass
= IconWindowClass(CLASSNAME_FRAME
,IDI_EXPLORER
);
109 // register child windows class
110 WindowClass(CLASSNAME_CHILDWND
, CS_CLASSDC
|CS_DBLCLKS
|CS_VREDRAW
).Register();
112 // register tree windows class
113 WindowClass(CLASSNAME_WINEFILETREE
, CS_CLASSDC
|CS_DBLCLKS
|CS_VREDRAW
).Register();
115 g_Globals
._cfStrFName
= RegisterClipboardFormat(CFSTR_FILENAME
);
119 int explorer_main(HINSTANCE hInstance
, HWND hwndDesktop
, int cmdshow
)
121 // initialize COM and OLE
124 // initialize Common Controls library
125 CommonControlInit usingCmnCtrl
;
128 InitInstance(hInstance
);
129 } catch(COMException
& e
) {
130 HandleException(e
, g_Globals
._hMainWnd
);
135 g_Globals
._desktop_mode
= true;
137 if (cmdshow
!= SW_HIDE
) {
138 #ifndef _ROS_ // don't maximize if being called from the ROS desktop
139 if (cmdshow
== SW_SHOWNORMAL
)
140 /*TODO: read window placement from registry */
141 cmdshow
= SW_MAXIMIZE
;
144 explorer_show_frame(hwndDesktop
, cmdshow
);
147 return Window::MessageLoop();
151 int WINAPI
_tWinMain(HINSTANCE hInstance
, HINSTANCE hPrevInstance
, LPTSTR lpCmdLine
, int nShowCmd
)
153 // create desktop window and task bar only, if there is no other shell and we are
154 // the first explorer instance
155 BOOL startup_desktop
= !IsAnyDesktopRunning();
157 // If there is given the command line option "-desktop", create desktop window anyways
158 if (!lstrcmp(lpCmdLine
,TEXT("-desktop")))
159 startup_desktop
= TRUE
;
161 if (!lstrcmp(lpCmdLine
,TEXT("-noexplorer"))) {
163 startup_desktop
= TRUE
;
166 g_Globals
._hInstance
= hInstance
;
168 HWND hwndDesktop
= 0;
172 hwndDesktop
= DesktopWindow::Create();
174 #ifndef _DEBUG //MF: disabled for debugging
182 int ret
= explorer_main(hInstance
, hwndDesktop
, nShowCmd
);