ReactOS 0.4.15-dev-7834-g00c4b3d
childwnd.c
Go to the documentation of this file.
1/*
2 * ReactOS Application MDI Child Window
3 *
4 * childwnd.c
5 *
6 * Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
7 *
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.
12 *
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.
17 *
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.
21 */
22
23#ifdef _MSC_VER
24#include "stdafx.h"
25#else
26#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
27#include <windows.h>
28#include <commctrl.h>
29#include <stdlib.h>
30#include <malloc.h>
31#include <memory.h>
32#include <tchar.h>
33#include <process.h>
34#include <stdio.h>
35#endif
36
37#include <assert.h>
38#define ASSERT assert
39
40#include "main.h"
41#include "childwnd.h"
42
44
45static void draw_splitbar(HWND hWnd, int x)
46{
47 RECT rt;
48 HDC hdc = GetDC(hWnd);
49
50 GetClientRect(hWnd, &rt);
51 rt.left = x - SPLIT_WIDTH/2;
52 rt.right = x + SPLIT_WIDTH/2+1;
53 InvertRect(hdc, &rt);
55}
56
57static void OnPaint(HWND hWnd, ChildWnd* pChildWnd)
58{
59 PAINTSTRUCT ps;
60 RECT rt;
61 GetClientRect(hWnd, &rt);
62 BeginPaint(hWnd, &ps);
63
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);
69/*
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);
75#ifdef _NO_EXTENSIONS
76 rt.top = rt.bottom - GetSystemMetrics(SM_CYHSCROLL);
77 FillRect(ps.hdc, &rt, GetStockObject(BLACK_BRUSH));
78#endif
79 */
80 EndPaint(hWnd, &ps);
81}
82
83
84static void OnSize(ChildWnd* pChildWnd, WPARAM wParam, LPARAM lParam)
85{
86 if (wParam != SIZE_MINIMIZED) {
87 //resize_tree(pChildWnd, LOWORD(lParam), HIWORD(lParam));
88 }
89}
90
91//
92// FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG)
93//
94// PURPOSE: Processes messages for the child windows.
95//
96// WM_COMMAND - process the application menu
97// WM_PAINT - Paint the main window
98// WM_DESTROY - post a quit message and return
99//
100//
102{
103 static int last_split;
105 ASSERT(pChildWnd);
106
107 switch(message) {
108 case WM_CREATE:
109 return 0;
110
111 case WM_MDIACTIVATE: // set an alternate menu here
112 if (lParam == (LPARAM)hWnd) {
113 } else {
114 }
116 // return 0;
117 break;
118
119 case WM_PAINT:
120 OnPaint(hWnd, pChildWnd);
121 return 0;
122
123 case WM_NCDESTROY:
124 // SetWindowLongPtr(hWnd, GWLP_USERDATA, 0);
125 break;
126
127 case WM_SETCURSOR:
128 if (LOWORD(lParam) == HTCLIENT) {
129 POINT pt;
132
133 if (pt.x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
135 return TRUE;
136 }
137 }
138 //goto def;
139 break;
140
141 case WM_LBUTTONDOWN: {
142 RECT rt;
143 int x = LOWORD(lParam);
144 GetClientRect(hWnd, &rt);
145 if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
146 last_split = pChildWnd->nSplitPos;
147#ifdef _NO_EXTENSIONS
149#endif
151 }
152 break;}
153
154 case WM_LBUTTONUP:
155 if (GetCapture() == hWnd) {
156#ifdef _NO_EXTENSIONS
157 RECT rt;
158 int x = LOWORD(lParam);
160 last_split = -1;
161 GetClientRect(hWnd, &rt);
162 pChildWnd->nSplitPos = x;
163 //resize_tree(pChildWnd, rt.right, rt.bottom);
164#endif
166 }
167 break;
168
169#ifdef _NO_EXTENSIONS
171 if (GetCapture()==hWnd && last_split>=0)
173 break;
174#endif
175 case WM_KEYDOWN:
176 if (wParam == VK_ESCAPE)
177 if (GetCapture() == hWnd) {
178 RECT rt;
179#ifdef _NO_EXTENSIONS
181#else
182 pChildWnd->nSplitPos = last_split;
183#endif
184 GetClientRect(hWnd, &rt);
185 //resize_tree(pChildWnd, rt.right, rt.bottom);
186 last_split = -1;
189 }
190 break;
191
192 case WM_MOUSEMOVE:
193 if (GetCapture() == hWnd) {
194 RECT rt;
195 int x = LOWORD(lParam);
196#ifdef _NO_EXTENSIONS
197 HDC hdc = GetDC(hWnd);
198 GetClientRect(hWnd, &rt);
201 InvertRect(hdc, &rt);
202 last_split = x;
203 rt.left = x-SPLIT_WIDTH/2;
204 rt.right = x+SPLIT_WIDTH/2+1;
205 InvertRect(hdc, &rt);
207#else
208 GetClientRect(hWnd, &rt);
209 if (x>=0 && x<rt.right) {
210 pChildWnd->nSplitPos = x;
211 resize_tree(pChildWnd, rt.right, rt.bottom);
212 rt.left = x-SPLIT_WIDTH/2;
213 rt.right = x+SPLIT_WIDTH/2+1;
215 UpdateWindow(pChildWnd->left.hWnd);
217 UpdateWindow(pChildWnd->right.hWnd);
218 }
219#endif
220 }
221 break;
222
223#ifndef _NO_EXTENSIONS
224 case WM_GETMINMAXINFO:
227 lpmmi->ptMaxTrackSize.x <<= 1;//2*GetSystemMetrics(SM_CXSCREEN) / SM_CXVIRTUALSCREEN
228 lpmmi->ptMaxTrackSize.y <<= 1;//2*GetSystemMetrics(SM_CYSCREEN) / SM_CYVIRTUALSCREEN
229 break;}
230#endif
231
232 case WM_SETFOCUS:
233 SetCurrentDirectory(pChildWnd->szPath);
234 SetFocus(pChildWnd->nFocusPanel? pChildWnd->hRightWnd: pChildWnd->hLeftWnd);
235 break;
236/*
237 case WM_COMMAND:
238 pane = GetFocus()==pChildWnd->left.hWnd? &pChildWnd->left: &pChildWnd->right;
239 switch(LOWORD(wParam)) {
240 case ID_WINDOW_NEW_WINDOW:
241 return 0;
242 default:
243 return pane_command(pane, LOWORD(wParam));
244 break;
245 }
246 break;
247 */
248 case WM_SIZE:
249 if (wParam != SIZE_MINIMIZED) {
250 OnSize(pChildWnd, wParam, lParam);
251 }
252 // fall through
253 // default: def:
255 }
257}
HWND hWnd
Definition: settings.c:17
static int last_split
Definition: childwnd.c:24
static void draw_splitbar(HWND hWnd, int x)
Definition: childwnd.c:90
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:302
HWND hFrameWnd
Definition: main.c:35
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CALLBACK
Definition: compat.h:35
#define pt(x, y)
Definition: drawing.c:79
#define SPLIT_WIDTH
Definition: eventvwr.c:45
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
static void OnSize(ChildWnd *pChildWnd, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:84
#define ASSERT
Definition: childwnd.c:38
static void OnPaint(HWND hWnd, ChildWnd *pChildWnd)
Definition: childwnd.c:57
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
unsigned int UINT
Definition: ndis.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define DefMDIChildProc
Definition: ros2win.h:33
Definition: main.h:61
int nSplitPos
Definition: main.h:69
WCHAR szPath[MAX_PATH]
Definition: main.h:71
int nFocusPanel
Definition: main.h:68
HWND hRightWnd
Definition: main.h:48
HWND hLeftWnd
Definition: main.h:47
HWND hWnd
Definition: main.h:62
Definition: tftpd.h:60
POINT ptMaxTrackSize
Definition: winuser.h:3631
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG left
Definition: windef.h:306
#define GetWindowLongPtr
Definition: treelist.c:73
#define GWLP_USERDATA
Definition: treelist.c:63
#define SetCurrentDirectory
Definition: winbase.h:3838
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define BLACK_BRUSH
Definition: wingdi.h:896
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define WM_PAINT
Definition: winuser.h:1620
HWND WINAPI SetCapture(_In_ HWND hWnd)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define WM_CAPTURECHANGED
Definition: winuser.h:1808
#define WM_CREATE
Definition: winuser.h:1608
BOOL WINAPI InvertRect(_In_ HDC, _In_ LPCRECT)
#define WM_SIZE
Definition: winuser.h:1611
#define IDC_ARROW
Definition: winuser.h:687
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2670
#define WM_SETFOCUS
Definition: winuser.h:1613
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1775
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define SIZE_MINIMIZED
Definition: winuser.h:2506
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define WM_MDIACTIVATE
Definition: winuser.h:1814
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_GETMINMAXINFO
Definition: winuser.h:1640
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI DrawMenuBar(_In_ HWND)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI UpdateWindow(_In_ HWND)
#define HTCLIENT
Definition: winuser.h:2475
#define LoadCursor
Definition: winuser.h:5812
HDC WINAPI GetDC(_In_opt_ HWND)
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define WM_NCDESTROY
Definition: winuser.h:1684
#define WM_SETCURSOR
Definition: winuser.h:1636
struct tagMINMAXINFO * LPMINMAXINFO
#define WM_KEYDOWN
Definition: winuser.h:1715
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define IDC_SIZEWE
Definition: winuser.h:694
#define VK_ESCAPE
Definition: winuser.h:2214
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)