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