source: trunk/src/user32/winnonclient.cpp@ 949

Last change on this file since 949 was 949, checked in by sandervl, 26 years ago

Moved new user32 here

File size: 6.2 KB
Line 
1/* $Id: winnonclient.cpp,v 1.1 1999-09-15 23:19:03 sandervl Exp $ */
2/*
3 * Win32 menu API functions for OS/2
4 *
5 * Copyright 1998 Sander van Leeuwen (Port from Wine)
6 *
7 * Parts ported from Wine: (window\nonclient.c)
8 * Copyright 1994 Alexandre Julliard
9 *
10 *
11 * Project Odin Software License can be found in LICENSE.TXT
12 *
13 */
14#include <os2win.h>
15
16 /* Some useful macros */
17#define HAS_DLGFRAME(style,exStyle) \
18 (((exStyle) & WS_EX_DLGMODALFRAME) || \
19 (((style) & WS_DLGFRAME) && !((style) & WS_BORDER)))
20
21#define HAS_THICKFRAME(style) \
22 (((style) & WS_THICKFRAME) && \
23 !(((style) & (WS_DLGFRAME|WS_BORDER)) == WS_DLGFRAME))
24
25#define HAS_FIXEDFRAME(style,exStyle) \
26 (((((exStyle) & WS_EX_DLGMODALFRAME) || \
27 ((style) & WS_DLGFRAME)) && ((style) & WS_BORDER)) && \
28 !((style) & WS_THICKFRAME))
29
30/* win31 style (simple border) in win95 look */
31#define HAS_CLASSICBORDER(style,exStyle) \
32 (!((exStyle) & WS_EX_STATICEDGE) && !((exStyle) & WS_EX_CLIENTEDGE) && \
33 !((style) & WS_THICKFRAME) && !((style) & WS_DLGFRAME) && \
34 ((style) & WS_BORDER))
35
36#define HAS_SIZEFRAME(style) \
37 (((style) & WS_THICKFRAME) && \
38 !(((style) & (WS_DLGFRAME|WS_BORDER)) == WS_DLGFRAME))
39
40#define HAS_MENU(w) (!((w)->dwStyle & WS_CHILD) && ((w)->wIDmenu != 0))
41
42#define ON_LEFT_BORDER(hit) \
43 (((hit) == HTLEFT) || ((hit) == HTTOPLEFT) || ((hit) == HTBOTTOMLEFT))
44#define ON_RIGHT_BORDER(hit) \
45 (((hit) == HTRIGHT) || ((hit) == HTTOPRIGHT) || ((hit) == HTBOTTOMRIGHT))
46#define ON_TOP_BORDER(hit) \
47 (((hit) == HTTOP) || ((hit) == HTTOPLEFT) || ((hit) == HTTOPRIGHT))
48#define ON_BOTTOM_BORDER(hit) \
49 (((hit) == HTBOTTOM) || ((hit) == HTBOTTOMLEFT) || ((hit) == HTBOTTOMRIGHT))
50
51/******************************************************************************
52 * NC_AdjustRectOuter95
53 *
54 * Computes the size of the "outside" parts of the window based on the
55 * parameters of the client area.
56 *
57 + PARAMS
58 * LPRECT16 rect
59 * DWORD style
60 * BOOL32 menu
61 * DWORD exStyle
62 *
63 * NOTES
64 * "Outer" parts of a window means the whole window frame, caption and
65 * menu bar. It does not include "inner" parts of the frame like client
66 * edge, static edge or scroll bars.
67 *
68 * Revision history
69 * 05-Jul-1997 Dave Cuthbert (dacut@ece.cmu.edu)
70 * Original (NC_AdjustRect95) cut & paste from NC_AdjustRect
71 *
72 * 20-Jun-1998 Eric Kohl (ekohl@abo.rhein-zeitung.de)
73 * Split NC_AdjustRect95 into NC_AdjustRectOuter95 and
74 * NC_AdjustRectInner95 and added handling of Win95 styles.
75 *
76 *****************************************************************************/
77
78static void
79NC_AdjustRectOuter95 (LPRECT rect, DWORD style, BOOL menu, DWORD exStyle)
80{
81 if(style & WS_ICONIC) return;
82
83 /* Decide if the window will be managed (see CreateWindowEx) */
84#if 0
85 if (!(Options.managed && !(style & WS_CHILD) &&
86 ((style & (WS_DLGFRAME | WS_THICKFRAME)) ||
87 (exStyle & WS_EX_DLGMODALFRAME))))
88#else
89 if (!(style & WS_CHILD) &&
90 ((style & (WS_DLGFRAME | WS_THICKFRAME)) ||
91 (exStyle & WS_EX_DLGMODALFRAME)))
92#endif
93 {
94 if (HAS_FIXEDFRAME( style, exStyle ))
95 InflateRect(rect, GetSystemMetrics(SM_CXDLGFRAME), GetSystemMetrics(SM_CYDLGFRAME) );
96 else
97 {
98 if (HAS_SIZEFRAME(style))
99 InflateRect( rect, GetSystemMetrics(SM_CXFRAME), GetSystemMetrics(SM_CYFRAME) );
100#if 0
101 if (style & WS_BORDER)
102 InflateRect( rect, GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));
103#endif
104 }
105
106 if ((style & WS_CAPTION) == WS_CAPTION)
107 {
108 if (exStyle & WS_EX_TOOLWINDOW)
109 rect->top -= GetSystemMetrics(SM_CYSMCAPTION);
110 else
111 rect->top -= GetSystemMetrics(SM_CYCAPTION);
112 }
113 }
114
115 if (menu)
116 rect->top -= GetSystemMetrics(SM_CYMENU);
117}
118
119
120/******************************************************************************
121 * NC_AdjustRectInner95
122 *
123 * Computes the size of the "inside" part of the window based on the
124 * parameters of the client area.
125 *
126 + PARAMS
127 * LPRECT16 rect
128 * DWORD style
129 * DWORD exStyle
130 *
131 * NOTES
132 * "Inner" part of a window means the window frame inside of the flat
133 * window frame. It includes the client edge, the static edge and the
134 * scroll bars.
135 *
136 * Revision history
137 * 05-Jul-1997 Dave Cuthbert (dacut@ece.cmu.edu)
138 * Original (NC_AdjustRect95) cut & paste from NC_AdjustRect
139 *
140 * 20-Jun-1998 Eric Kohl (ekohl@abo.rhein-zeitung.de)
141 * Split NC_AdjustRect95 into NC_AdjustRectOuter95 and
142 * NC_AdjustRectInner95 and added handling of Win95 styles.
143 *
144 *****************************************************************************/
145
146static void
147NC_AdjustRectInner95 (LPRECT rect, DWORD style, DWORD exStyle)
148{
149 if(style & WS_ICONIC) return;
150
151 if (exStyle & WS_EX_CLIENTEDGE)
152 InflateRect (rect, GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE));
153
154 if (exStyle & WS_EX_STATICEDGE)
155 InflateRect (rect, GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));
156
157 if (HAS_CLASSICBORDER(style, exStyle))
158 InflateRect( rect, GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER ));
159
160 if (style & WS_VSCROLL) rect->right += GetSystemMetrics(SM_CXVSCROLL);
161 if (style & WS_HSCROLL) rect->bottom += GetSystemMetrics(SM_CYHSCROLL);
162}
163
164/***********************************************************************
165 * AdjustWindowRectEx (USER.454)
166 */
167BOOL WIN32API AdjustWindowRectEx(LPRECT rect, DWORD style,
168 BOOL menu, DWORD exStyle )
169{
170 /* Correct the window style */
171 if (!(style & (WS_POPUP | WS_CHILD))) /* Overlapped window */
172 style |= WS_CAPTION;
173 style &= (WS_DLGFRAME | WS_BORDER | WS_THICKFRAME | WS_CHILD);
174 exStyle &= (WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE |
175 WS_EX_STATICEDGE | WS_EX_TOOLWINDOW);
176 if (exStyle & WS_EX_DLGMODALFRAME) style &= ~WS_THICKFRAME;
177
178 NC_AdjustRectOuter95( rect, style, menu, exStyle );
179 NC_AdjustRectInner95( rect, style, exStyle );
180
181 return TRUE;
182}
183
184/***********************************************************************
185 * AdjustWindowRect (USER32.2)
186 */
187BOOL WIN32API AdjustWindowRect( LPRECT rect, DWORD style, BOOL menu )
188{
189 return AdjustWindowRectEx( rect, style, menu, 0 );
190}
Note: See TracBrowser for help on using the repository browser.