private.h 16 KB

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