]> git.saurik.com Git - wxWidgets.git/blame - include/wx/os2/private.h
wxStaticBitmapBase::DoGetBestSize
[wxWidgets.git] / include / wx / os2 / private.h
CommitLineData
0e320a79
DW
1/////////////////////////////////////////////////////////////////////////////
2// Name: private.h
45fcbf3b
DW
3// Purpose: Private declarations: as this header is only included by
4// wxWindows itself, it may contain identifiers which don't start
5// with "wx".
6// Author: Julian Smart
0e320a79 7// Modified by:
45fcbf3b 8// Created: 01/02/97
0e320a79 9// RCS-ID: $Id$
45fcbf3b
DW
10// Copyright: (c) Julian Smart
11// Licence: wxWindows licence
0e320a79
DW
12/////////////////////////////////////////////////////////////////////////////
13
14#ifndef _WX_PRIVATE_H_
15#define _WX_PRIVATE_H_
16
b86737ee 17#define INCL_BASE
45fcbf3b 18#define INCL_PM
20947e08 19#define INCL_GPI
61243a51 20#define INCL_WINSYS
f6bcfd97 21#define INCL_SHLERRORS
45fcbf3b 22#include <os2.h>
74707ecf
SN
23#if defined (__EMX__) && !defined(USE_OS2_TOOLKIT_HEADERS)
24/* struct missing in "os2emx.h" */
25 typedef struct _SPBCDATA {
26 ULONG cbSize; /* Size of control block. */
27 ULONG ulTextLimit; /* Entryfield text limit. */
28 LONG lLowerLimit; /* Spin lower limit (numeric only). */
29 LONG lUpperLimit; /* Spin upper limit (numeric only). */
30 ULONG idMasterSpb; /* ID of the servant's master spinbutton. */
31 PVOID pHWXCtlData; /* Handwriting control data structure flag. */
32 } SPBCDATA;
f140b352 33
74707ecf
SN
34 typedef SPBCDATA *PSPBCDATA;
35#endif
0e320a79 36
f5b5c15c
DW
37#include "wx/fontenc.h"
38
45fcbf3b
DW
39class WXDLLEXPORT wxFont;
40class WXDLLEXPORT wxWindow;
74707ecf 41class WXDLLEXPORT wxString;
db16e5c3 42class WXDLLEXPORT wxBitmap;
45fcbf3b
DW
43
44// ---------------------------------------------------------------------------
45// private constants
46// ---------------------------------------------------------------------------
47
48// Conversion
49static const double METRIC_CONVERSION_CONSTANT = 0.0393700787;
50
51// Scaling factors for various unit conversions
52static const double mm2inches = (METRIC_CONVERSION_CONSTANT);
53static const double inches2mm = (1/METRIC_CONVERSION_CONSTANT);
54
55static const double mm2twips = (METRIC_CONVERSION_CONSTANT*1440);
56static const double twips2mm = (1/(METRIC_CONVERSION_CONSTANT*1440));
57
58static const double mm2pt = (METRIC_CONVERSION_CONSTANT*72);
59static const double pt2mm = (1/(METRIC_CONVERSION_CONSTANT*72));
60
511ac294
DW
61//
62// Constant strings for control names and classes
63//
64
65//
66// Controls
67//
68WXDLLEXPORT_DATA(extern const wxChar*) wxButtonNameStr;
69WXDLLEXPORT_DATA(extern const wxChar*) wxCanvasNameStr;
70WXDLLEXPORT_DATA(extern const wxChar*) wxCheckBoxNameStr;
71WXDLLEXPORT_DATA(extern const wxChar*) wxChoiceNameStr;
72WXDLLEXPORT_DATA(extern const wxChar*) wxComboBoxNameStr;
73WXDLLEXPORT_DATA(extern const wxChar*) wxDialogNameStr;
74WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr;
75WXDLLEXPORT_DATA(extern const wxChar*) wxGaugeNameStr;
76WXDLLEXPORT_DATA(extern const wxChar*) wxStaticBoxNameStr;
77WXDLLEXPORT_DATA(extern const wxChar*) wxListBoxNameStr;
78WXDLLEXPORT_DATA(extern const wxChar*) wxStaticTextNameStr;
79WXDLLEXPORT_DATA(extern const wxChar*) wxStaticBitmapNameStr;
80WXDLLEXPORT_DATA(extern const wxChar*) wxMultiTextNameStr;
81WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr;
82WXDLLEXPORT_DATA(extern const wxChar*) wxRadioBoxNameStr;
83WXDLLEXPORT_DATA(extern const wxChar*) wxRadioButtonNameStr;
84WXDLLEXPORT_DATA(extern const wxChar*) wxBitmapRadioButtonNameStr;
85WXDLLEXPORT_DATA(extern const wxChar*) wxScrollBarNameStr;
86WXDLLEXPORT_DATA(extern const wxChar*) wxSliderNameStr;
87WXDLLEXPORT_DATA(extern const wxChar*) wxStaticNameStr;
88WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlWindowNameStr;
89WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlNameStr;
90WXDLLEXPORT_DATA(extern const wxChar*) wxVirtListBoxNameStr;
91WXDLLEXPORT_DATA(extern const wxChar*) wxButtonBarNameStr;
92WXDLLEXPORT_DATA(extern const wxChar*) wxEnhDialogNameStr;
93WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr;
94WXDLLEXPORT_DATA(extern const wxChar*) wxStatusLineNameStr;
95WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;
96WXDLLEXPORT_DATA(extern const wxChar*) wxMessageBoxCaptionStr;
97WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorPromptStr;
98WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorDefaultWildcardStr;
99WXDLLEXPORT_DATA(extern const wxChar*) wxInternalErrorStr;
100WXDLLEXPORT_DATA(extern const wxChar*) wxFatalErrorStr;
101WXDLLEXPORT_DATA(extern const wxChar*) wxTreeCtrlNameStr;
102WXDLLEXPORT_DATA(extern const wxChar*) wxDirDialogNameStr;
103WXDLLEXPORT_DATA(extern const wxChar*) wxDirDialogDefaultFolderStr;
104
105//
106// Class names
107//
108WXDLLEXPORT_DATA(extern const wxChar*) wxFrameClassName;
109WXDLLEXPORT_DATA(extern const wxChar*) wxFrameClassNameNoRedraw;
110WXDLLEXPORT_DATA(extern const wxChar*) wxMDIFrameClassName;
111WXDLLEXPORT_DATA(extern const wxChar*) wxMDIFrameClassNameNoRedraw;
112WXDLLEXPORT_DATA(extern const wxChar*) wxMDIChildFrameClassName;
113WXDLLEXPORT_DATA(extern const wxChar*) wxMDIChildFrameClassNameNoRedraw;
114WXDLLEXPORT_DATA(extern const wxChar*) wxPanelClassName;
115WXDLLEXPORT_DATA(extern const wxChar*) wxPanelClassNameNR;
116WXDLLEXPORT_DATA(extern const wxChar*) wxCanvasClassName;
117WXDLLEXPORT_DATA(extern const wxChar*) wxCanvasClassNameNR;
118
45fcbf3b
DW
119// ---------------------------------------------------------------------------
120// standard icons from the resources
121// ---------------------------------------------------------------------------
122
22e0b22b 123#ifdef __WXPM__
bd3b171d 124
45fcbf3b
DW
125WXDLLEXPORT_DATA(extern HICON) wxSTD_FRAME_ICON;
126WXDLLEXPORT_DATA(extern HICON) wxSTD_MDIPARENTFRAME_ICON;
127WXDLLEXPORT_DATA(extern HICON) wxSTD_MDICHILDFRAME_ICON;
128WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_FRAME_ICON;
129WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDIPARENTFRAME_ICON;
130WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDICHILDFRAME_ICON;
131WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
132
22e0b22b 133#endif
bd3b171d 134
45fcbf3b
DW
135// ---------------------------------------------------------------------------
136// this defines a CASTWNDPROC macro which casts a pointer to the type of a
137// window proc for PM.
138// MPARAM is a void * but is really a 32-bit value
139// ---------------------------------------------------------------------------
140
141typedef MRESULT (APIENTRY * WndProcCast) (HWND, ULONG, MPARAM, MPARAM);
142#define CASTWNDPROC (WndProcCast)
143
144#if wxUSE_ITSY_BITSY
145 #define IBS_HORZCAPTION 0x4000L
146 #define IBS_VERTCAPTION 0x8000L
147
86de7616
DW
148 UINT APIENTRY ibGetCaptionSize( HWND hWnd ) ;
149 UINT APIENTRY ibSetCaptionSize( HWND hWnd, UINT nSize ) ;
150 MRESULT APIENTRY ibDefWindowProc( HWND hWnd, ULONG ulMsg, MPARAM wParam, MPARAM lParam ) ;
151 VOID APIENTRY ibAdjustWindowRect( HWND hWnd, LPRECT lprc ) ;
45fcbf3b
DW
152#endif // wxUSE_ITSY_BITSY
153
154/*
155 * Decide what window classes we're going to use
156 * for this combination of CTl3D/FAFA settings
0e320a79
DW
157 */
158
45fcbf3b
DW
159#define STATIC_CLASS _T("STATIC")
160#define STATIC_FLAGS (SS_TEXT|DT_LEFT|SS_LEFT|WS_VISIBLE)
86de7616 161#define CHECK_CLASS _T("BUTTON")
45fcbf3b
DW
162#define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP)
163#define CHECK_IS_FAFA FALSE
86de7616 164#define RADIO_CLASS _T("BUTTON" )
45fcbf3b
DW
165#define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_VISIBLE)
166#define RADIO_SIZE 20
167#define RADIO_IS_FAFA FALSE
168#define PURE_WINDOWS
169/* PM has no group box button style
170#define GROUP_CLASS "BUTTON"
171#define GROUP_FLAGS (BS_GROUPBOX|WS_CHILD|WS_VISIBLE)
172*/
173
174/*
175#define BITCHECK_FLAGS (FB_BITMAP|FC_BUTTONDRAW|FC_DEFAULT|WS_VISIBLE)
176#define BITRADIO_FLAGS (FC_BUTTONDRAW|FB_BITMAP|FC_RADIO|WS_CHILD|WS_VISIBLE)
177*/
178
179// ---------------------------------------------------------------------------
180// misc macros
181// ---------------------------------------------------------------------------
182
183#define MEANING_CHARACTER '0'
184#define DEFAULT_ITEM_WIDTH 200
185#define DEFAULT_ITEM_HEIGHT 80
186
187// Scale font to get edit control height
188#define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (3*(cy)/2)
189
22e0b22b 190#ifdef __WXPM__
bd3b171d 191
45fcbf3b
DW
192// Generic subclass proc, for panel item moving/sizing and intercept
193// EDIT control VK_RETURN messages
86de7616 194extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message, WXWPARAM wParam, WXLPARAM lParam);
45fcbf3b 195
bd3b171d
SN
196#endif
197
45fcbf3b
DW
198// ---------------------------------------------------------------------------
199// constants which might miss from some compilers' headers
200// ---------------------------------------------------------------------------
201
202#if !defined(WS_EX_CLIENTEDGE)
008089f6 203 #define WS_EX_CLIENTEDGE 0x00000200L
45fcbf3b
DW
204#endif
205
206#ifndef ENDSESSION_LOGOFF
207 #define ENDSESSION_LOGOFF 0x80000000
208#endif
209
210// ---------------------------------------------------------------------------
211// debug messages -- OS/2 has no native debug output system
212// ---------------------------------------------------------------------------
213
214// ---------------------------------------------------------------------------
215// macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
216// returns Foo cast to the Windows type for oruselves, while GetFooOf() takes
217// an argument which should be a pointer or reference to the object of the
218// corresponding class (this depends on the macro)
219// ---------------------------------------------------------------------------
220
221#define GetHwnd() ((HWND)GetHWND())
222#define GetHwndOf(win) ((HWND)((win)->GetHWND()))
223// old name
224#define GetWinHwnd GetHwndOf
225
226#define GetHdc() ((HDC)GetHDC())
227#define GetHdcOf(dc) ((HDC)(dc).GetHDC())
228
8bb6da4a
DW
229#define GetHbitmap() ((HBITMAP)GetHBITMAP())
230#define GetHbitmapOf(bmp) ((HBITMAP)(bmp).GetHBITMAP())
231
45fcbf3b
DW
232#define GetHicon() ((HICON)GetHICON())
233#define GetHiconOf(icon) ((HICON)(icon).GetHICON())
234
235#define GetHaccel() ((HACCEL)GetHACCEL())
236#define GetHaccelOf(table) ((HACCEL)((table).GetHACCEL()))
237
238#define GetHmenu() ((HMENU)GetHMenu())
239#define GetHmenuOf(menu) ((HMENU)menu->GetHMenu())
240
8bb6da4a
DW
241#define GetHcursor() ((HCURSOR)GetHCURSOR())
242#define GetHcursorOf(cursor) ((HCURSOR)(cursor).GetHCURSOR())
243
244#define GetHfont() ((HFONT)GetHFONT())
245#define GetHfontOf(font) ((HFONT)(font).GetHFONT())
246
247// OS/2 convention of the mask is opposed to the wxWindows one, so we need
248// to invert the mask each time we pass one/get one to/from Windows
249extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w = 0, int h = 0);
250
45fcbf3b
DW
251// ---------------------------------------------------------------------------
252// global data
253// ---------------------------------------------------------------------------
254
255// The MakeProcInstance version of the function wxSubclassedGenericControlProc
283ed244 256WXDLLEXPORT_DATA(extern int) wxGenericControlSubClassProc;
45fcbf3b
DW
257WXDLLEXPORT_DATA(extern wxChar*) wxBuffer;
258WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance;
259
260// ---------------------------------------------------------------------------
261// global functions
262// ---------------------------------------------------------------------------
263
264extern "C"
265{
266WXDLLEXPORT HINSTANCE wxGetInstance();
267}
268
bd3b171d
SN
269WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
270
d4ca5c8c
SN
271#include "wx/thread.h"
272static inline MRESULT MySendMsg(HWND hwnd, ULONG ulMsgid,
273 MPARAM mpParam1, MPARAM mpParam2)
274{
275 MRESULT vRes;
276 vRes = ::WinSendMsg(hwnd, ulMsgid, mpParam1, mpParam2);
277#if wxUSE_THREADS
278 if (!wxThread::IsMain())
279 ::WinPostMsg(hwnd, ulMsgid, mpParam1, mpParam2);
280#endif
281 return vRes;
282}
283#define WinSendMsg MySendMsg
284
22e0b22b 285#ifdef __WXPM__
bd3b171d 286
008089f6
DW
287WXDLLEXPORT void wxDrawBorder( HPS hPS
288 ,RECTL& rRect
289 ,WXDWORD dwStyle
290 );
291
45fcbf3b
DW
292WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
293
e99762c0 294WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font);
1b75810c
DW
295
296WXDLLEXPORT void wxConvertVectorFontSize( FIXED fxPointSize
297 ,PFATTRS pFattrs
298 );
e99762c0
DW
299WXDLLEXPORT void wxFillLogFont( LOGFONT* pLogFont
300 ,PFACENAMEDESC pFaceName
f140b352 301 ,HPS* phPS
7d921159 302 ,bool* pbInternalPS
cc95f4f9
DW
303 ,long* pflId
304 ,wxString& sFaceName
305 ,wxFont* pFont
e99762c0 306 );
cc95f4f9
DW
307WXDLLEXPORT wxFontEncoding wxGetFontEncFromCharSet(int nCharSet);
308WXDLLEXPORT void wxOS2SelectMatchingFontByName( PFATTRS vFattrs
309 ,PFACENAMEDESC pFaceName
310 ,PFONTMETRICS pFM
311 ,int nNumFonts
312 ,const wxFont* pFont
313 );
e99762c0
DW
314WXDLLEXPORT wxFont wxCreateFontFromLogFont( LOGFONT* pLogFont
315 ,PFONTMETRICS pFM
316 ,PFACENAMEDESC pFace
317 );
318WXDLLEXPORT int wxGpiStrcmp(char* s0, char* s1);
45fcbf3b
DW
319
320WXDLLEXPORT void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos);
321WXDLLEXPORT void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos);
322
323// Find maximum size of window/rectangle
324WXDLLEXPORT extern void wxFindMaxSize(WXHWND hwnd, RECT *rect);
325
326WXDLLEXPORT wxWindow* wxFindControlFromHandle(WXHWND hWnd);
327WXDLLEXPORT void wxAddControlHandle(WXHWND hWnd, wxWindow *item);
328
329// Safely get the window text (i.e. without using fixed size buffer)
330WXDLLEXPORT extern wxString wxGetWindowText(WXHWND hWnd);
331
332// get the window class name
333WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd);
334
335// get the window id (should be unsigned, hence this is not wxWindowID which
336// is, for mainly historical reasons, signed)
337WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd);
338
914589c2
DW
339// Convert a PM Error code to a string
340WXDLLEXPORT extern wxString wxPMErrorToStr(ERRORID vError);
341
45fcbf3b
DW
342// Does this window style specify any border?
343inline bool wxStyleHasBorder(long style)
344{
345 return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER |
346 wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
347}
348
3011bf2b
DW
349inline RECTL wxGetWindowRect(HWND hWnd)
350{
351 RECTL vRect;
352
353 ::WinQueryWindowRect(hWnd, &vRect);
354 return vRect;
355} // end of wxGetWindowRect
356
3c299c3a
DW
357WXDLLEXPORT extern void wxOS2SetFont( HWND hWnd
358 ,const wxFont& rFont
359 );
360
008089f6 361
db16e5c3
DW
362WXDLLEXPORT extern bool wxCheckWindowWndProc( WXHWND hWnd
363 ,WXFARPROC fnWndProc
3011bf2b 364 );
db16e5c3
DW
365WXDLLEXPORT extern wxBitmap wxDisableBitmap( const wxBitmap& rBmp
366 ,long lColor
367 );
368
bd3b171d
SN
369#include "wx/colour.h"
370
9794cae1 371WXDLLEXPORT extern COLORREF wxColourToRGB(const wxColour& rColor);
3011bf2b 372
22e0b22b 373#endif // __WXPM__
bd3b171d
SN
374
375#endif // _WX_PRIVATE_H_