501393e43557fb031a80ff2b21a1d457a4c96126
2 * ReactOS Application MDI Child Window
6 * Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
43 ////////////////////////////////////////////////////////////////////////////////
45 static void draw_splitbar(HWND hWnd
, int x
)
48 HDC hdc
= GetDC(hWnd
);
50 GetClientRect(hWnd
, &rt
);
51 rt
.left
= x
- SPLIT_WIDTH
/2;
52 rt
.right
= x
+ SPLIT_WIDTH
/2+1;
57 static void OnPaint(HWND hWnd
, ChildWnd
* pChildWnd
)
61 GetClientRect(hWnd
, &rt
);
62 BeginPaint(hWnd
, &ps
);
64 // lastBrush = SelectObject(ps.hdc, (HBRUSH)GetStockObject(WHITE_BRUSH));
65 // Rectangle(ps.hdc, rt.left, rt.top-1, rt.right, rt.bottom+1);
66 // SelectObject(ps.hdc, lastBrush);
67 // rt.top = rt.bottom - GetSystemMetrics(SM_CYHSCROLL);
68 FillRect(ps
.hdc
, &rt
, GetStockObject(BLACK_BRUSH
));
70 rt.left = pChildWnd->nSplitPos-SPLIT_WIDTH/2;
71 rt.right = pChildWnd->nSplitPos+SPLIT_WIDTH/2+1;
72 lastBrush = SelectBrush(ps.hdc, (HBRUSH)GetStockObject(COLOR_SPLITBAR));
73 Rectangle(ps.hdc, rt.left, rt.top-1, rt.right, rt.bottom+1);
74 SelectObject(ps.hdc, lastBrush);
76 rt.top = rt.bottom - GetSystemMetrics(SM_CYHSCROLL);
77 FillRect(ps.hdc, &rt, GetStockObject(BLACK_BRUSH));
84 static void OnSize(ChildWnd
* pChildWnd
, WPARAM wParam
, LPARAM lParam
)
86 if (wParam
!= SIZE_MINIMIZED
) {
87 //resize_tree(pChildWnd, LOWORD(lParam), HIWORD(lParam));
92 // FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG)
94 // PURPOSE: Processes messages for the child windows.
96 // WM_COMMAND - process the application menu
97 // WM_PAINT - Paint the main window
98 // WM_DESTROY - post a quit message and return
101 LRESULT CALLBACK
ChildWndProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
103 static int last_split
;
105 ChildWnd
* pChildWnd
= (ChildWnd
*)GetWindowLong(hWnd
, GWL_USERDATA
);
106 // ChildWnd* new_child;
114 case WM_MDIACTIVATE
: // set an alternate menu here
115 if (lParam
== (LPARAM
)hWnd
) {
118 DrawMenuBar(hFrameWnd
);
123 OnPaint(hWnd
, pChildWnd
);
127 //SetWindowLong(hWnd, GWL_USERDATA, 0);
131 if (LOWORD(lParam
) == HTCLIENT
) {
134 ScreenToClient(hWnd
, &pt
);
136 if (pt
.x
>=pChildWnd
->nSplitPos
-SPLIT_WIDTH
/2 && pt
.x
<pChildWnd
->nSplitPos
+SPLIT_WIDTH
/2+1) {
137 SetCursor(LoadCursor(0, IDC_SIZEWE
));
144 case WM_LBUTTONDOWN
: {
146 int x
= LOWORD(lParam
);
148 GetClientRect(hWnd
, &rt
);
150 if (x
>=pChildWnd
->nSplitPos
-SPLIT_WIDTH
/2 && x
<pChildWnd
->nSplitPos
+SPLIT_WIDTH
/2+1) {
151 last_split
= pChildWnd
->nSplitPos
;
152 #ifdef _NO_EXTENSIONS
153 draw_splitbar(hWnd
, last_split
);
161 if (GetCapture() == hWnd
) {
162 #ifdef _NO_EXTENSIONS
164 int x
= LOWORD(lParam
);
165 draw_splitbar(hWnd
, last_split
);
167 GetClientRect(hWnd
, &rt
);
168 pChildWnd
->nSplitPos
= x
;
169 //resize_tree(pChildWnd, rt.right, rt.bottom);
175 #ifdef _NO_EXTENSIONS
176 case WM_CAPTURECHANGED
:
177 if (GetCapture()==hWnd
&& last_split
>=0)
178 draw_splitbar(hWnd
, last_split
);
183 if (wParam
== VK_ESCAPE
)
184 if (GetCapture() == hWnd
) {
186 #ifdef _NO_EXTENSIONS
187 draw_splitbar(hWnd
, last_split
);
189 pChildWnd
->nSplitPos
= last_split
;
191 GetClientRect(hWnd
, &rt
);
192 //resize_tree(pChildWnd, rt.right, rt.bottom);
195 SetCursor(LoadCursor(0, IDC_ARROW
));
200 if (GetCapture() == hWnd
) {
202 int x
= LOWORD(lParam
);
204 #ifdef _NO_EXTENSIONS
205 HDC hdc
= GetDC(hWnd
);
206 GetClientRect(hWnd
, &rt
);
208 rt
.left
= last_split
-SPLIT_WIDTH
/2;
209 rt
.right
= last_split
+SPLIT_WIDTH
/2+1;
210 InvertRect(hdc
, &rt
);
213 rt
.left
= x
-SPLIT_WIDTH
/2;
214 rt
.right
= x
+SPLIT_WIDTH
/2+1;
215 InvertRect(hdc
, &rt
);
217 ReleaseDC(hWnd
, hdc
);
219 GetClientRect(hWnd
, &rt
);
221 if (x
>=0 && x
<rt
.right
) {
222 pChildWnd
->nSplitPos
= x
;
223 resize_tree(pChildWnd
, rt
.right
, rt
.bottom
);
224 rt
.left
= x
-SPLIT_WIDTH
/2;
225 rt
.right
= x
+SPLIT_WIDTH
/2+1;
226 InvalidateRect(hWnd
, &rt
, FALSE
);
227 UpdateWindow(pChildWnd
->left
.hWnd
);
229 UpdateWindow(pChildWnd
->right
.hWnd
);
235 #ifndef _NO_EXTENSIONS
236 case WM_GETMINMAXINFO
:
237 DefMDIChildProc(hWnd
, message
, wParam
, lParam
);
239 {LPMINMAXINFO lpmmi
= (LPMINMAXINFO
)lParam
;
241 lpmmi
->ptMaxTrackSize
.x
<<= 1;//2*GetSystemMetrics(SM_CXSCREEN) / SM_CXVIRTUALSCREEN
242 lpmmi
->ptMaxTrackSize
.y
<<= 1;//2*GetSystemMetrics(SM_CYSCREEN) / SM_CYVIRTUALSCREEN
247 SetCurrentDirectory(pChildWnd
->szPath
);
248 SetFocus(pChildWnd
->nFocusPanel
? pChildWnd
->hRightWnd
: pChildWnd
->hLeftWnd
);
252 pane = GetFocus()==pChildWnd->left.hWnd? &pChildWnd->left: &pChildWnd->right;
253 switch(LOWORD(wParam)) {
254 case ID_WINDOW_NEW_WINDOW:
257 return pane_command(pane, LOWORD(wParam));
263 if (wParam
!= SIZE_MINIMIZED
) {
264 OnSize(pChildWnd
, wParam
, lParam
);
268 return DefMDIChildProc(hWnd
, message
, wParam
, lParam
);
271 return DefMDIChildProc(hWnd
, message
, wParam
, lParam
);