]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/private.h
Added implementation of MDI using top level windows
[wxWidgets.git] / include / wx / msw / private.h
index 7f26ece1cb627dd44eb12289be577c3574cb19c1..3d2bf3cb879804640352bde13e31b7a458ac7052 100644 (file)
 #ifndef _WX_PRIVATE_H_
 #define _WX_PRIVATE_H_
 
 #ifndef _WX_PRIVATE_H_
 #define _WX_PRIVATE_H_
 
-#ifndef STRICT
-    #define STRICT 1
-#endif
-
-#include <windows.h>
-
+#include "wx/msw/wrapwin.h"
 
 #if defined (__WXWINCE__)
     #include <wingdi.h>     // RGB, COLORREF
 
 #if defined (__WXWINCE__)
     #include <wingdi.h>     // RGB, COLORREF
+    #define ERRFALSE(x)
     #include <winuser.h>    // Global Namespaces ::GetKeyState, ::GetWindowRect
     #include <winuser.h>    // Global Namespaces ::GetKeyState, ::GetWindowRect
+    #include "wx/msw/winundef.h"
 #endif
 
 
 #endif
 
 
@@ -32,9 +29,6 @@
     #include "wx/msw/microwin.h"
 #endif
 
     #include "wx/msw/microwin.h"
 #endif
 
-// undefine conflicting symbols which were defined in windows.h
-#include "wx/msw/winundef.h"
-
 // Include fixes for MSLU:
 #include "wx/msw/mslu.h"
 
 // Include fixes for MSLU:
 #include "wx/msw/mslu.h"
 
@@ -80,7 +74,7 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
 // define things missing from some compilers' headers
 // ---------------------------------------------------------------------------
 
 // define things missing from some compilers' headers
 // ---------------------------------------------------------------------------
 
-#if defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS
+#if defined(__WXWINCE__) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)
 #ifndef ZeroMemory
     inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); }
 #endif
 #ifndef ZeroMemory
     inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); }
 #endif
@@ -88,9 +82,7 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
 
 // this defines a CASTWNDPROC macro which casts a pointer to the type of a
 // window proc
 
 // this defines a CASTWNDPROC macro which casts a pointer to the type of a
 // window proc
-#if defined(__WXWINCE__)
-    typedef FARPROC WndProcCast;
-#elif defined(STRICT) || defined(__GNUC__)
+#if defined(STRICT) || defined(__GNUC__)
     typedef WNDPROC WndProcCast;
 #else
     typedef FARPROC WndProcCast;
     typedef WNDPROC WndProcCast;
 #else
     typedef FARPROC WndProcCast;
@@ -99,6 +91,8 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
 
 #define CASTWNDPROC (WndProcCast)
 
 
 #define CASTWNDPROC (WndProcCast)
 
+
+
 // ---------------------------------------------------------------------------
 // some stuff for old Windows versions (FIXME: what does it do here??)
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // some stuff for old Windows versions (FIXME: what does it do here??)
 // ---------------------------------------------------------------------------
@@ -183,22 +177,6 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
 extern LONG APIENTRY _EXPORT
   wxSubclassedGenericControlProc(WXHWND hWnd, WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
 
 extern LONG APIENTRY _EXPORT
   wxSubclassedGenericControlProc(WXHWND hWnd, WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
 
-// ---------------------------------------------------------------------------
-// constants which might miss from some compilers' headers
-// ---------------------------------------------------------------------------
-
-#if !defined(__WIN32__) && !defined(WS_EX_CLIENTEDGE)
-    #define WS_EX_CLIENTEDGE 0
-#endif
-
-#if defined(__WIN32__) && !defined(WS_EX_CLIENTEDGE)
-    #define WS_EX_CLIENTEDGE 0x00000200L
-#endif
-
-#ifndef ENDSESSION_LOGOFF
-    #define ENDSESSION_LOGOFF    0x80000000
-#endif
-
 // ---------------------------------------------------------------------------
 // useful macros and functions
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // useful macros and functions
 // ---------------------------------------------------------------------------
@@ -302,12 +280,18 @@ HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);
 // get the current state of SHIFT/CTRL keys
 inline bool wxIsShiftDown()
 {
 // get the current state of SHIFT/CTRL keys
 inline bool wxIsShiftDown()
 {
-    return (::GetKeyState(VK_SHIFT) & 0x100) != 0;
+//    return (::GetKeyState(VK_SHIFT) & 0x100) != 0;
+    // Returns different negative values on WinME and WinNT,
+    // so simply test for negative value.
+    return ::GetKeyState(VK_SHIFT) < 0;
 }
 
 inline bool wxIsCtrlDown()
 {
 }
 
 inline bool wxIsCtrlDown()
 {
-    return (::GetKeyState(VK_CONTROL) & 0x100) != 0;
+//    return (::GetKeyState(VK_CONTROL) & 0x100) != 0;
+    // Returns different negative values on WinME and WinNT,
+    // so simply test for negative value.
+    return ::GetKeyState(VK_CONTROL) < 0;
 }
 
 // wrapper around GetWindowRect() and GetClientRect() APIs doing error checking
 }
 
 // wrapper around GetWindowRect() and GetClientRect() APIs doing error checking
@@ -346,6 +330,20 @@ inline RECT wxGetClientRect(HWND hwnd)
 // small helper classes
 // ---------------------------------------------------------------------------
 
 // small helper classes
 // ---------------------------------------------------------------------------
 
+// a template to make initializing Windows styructs less painful: it zeroes all
+// the struct fields and also sets cbSize member to the correct value (and so
+// can be only used with structures which have this member...)
+template <class T>
+struct WinStruct : public T
+{
+    WinStruct()
+    {
+        ::ZeroMemory(this, sizeof(T));
+        cbSize = sizeof(T);
+    }
+};
+
+
 // create an instance of this class and use it as the HDC for screen, will
 // automatically release the DC going out of scope
 class ScreenHDC
 // create an instance of this class and use it as the HDC for screen, will
 // automatically release the DC going out of scope
 class ScreenHDC
@@ -398,6 +396,7 @@ private:
    DECLARE_NO_COPY_CLASS(SelectInHDC)
 };
 
    DECLARE_NO_COPY_CLASS(SelectInHDC)
 };
 
+#ifndef __WXWINCE__
 // when working with global pointers (which is unfortunately still necessary
 // sometimes, e.g. for clipboard) it is important to unlock them exactly as
 // many times as we lock them which just asks for using a "smart lock" class
 // when working with global pointers (which is unfortunately still necessary
 // sometimes, e.g. for clipboard) it is important to unlock them exactly as
 // many times as we lock them which just asks for using a "smart lock" class
@@ -436,6 +435,7 @@ private:
 
     DECLARE_NO_COPY_CLASS(GlobalPtr)
 };
 
     DECLARE_NO_COPY_CLASS(GlobalPtr)
 };
+#endif
 
 // ---------------------------------------------------------------------------
 // macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
 
 // ---------------------------------------------------------------------------
 // macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
@@ -482,9 +482,7 @@ private:
 // global data
 // ---------------------------------------------------------------------------
 
 // global data
 // ---------------------------------------------------------------------------
 
-WXDLLEXPORT_DATA(extern wxChar*) wxBuffer;
-
-WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance;
+WXDLLIMPEXP_DATA_BASE(extern HINSTANCE) wxhInstance;
 
 // ---------------------------------------------------------------------------
 // global functions
 
 // ---------------------------------------------------------------------------
 // global functions
@@ -492,10 +490,10 @@ WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance;
 
 extern "C"
 {
 
 extern "C"
 {
-    WXDLLEXPORT HINSTANCE wxGetInstance();
+    WXDLLIMPEXP_BASE HINSTANCE wxGetInstance();
 }
 
 }
 
-WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
+WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
 
 #if wxUSE_GUI
 
 
 #if wxUSE_GUI
 
@@ -550,10 +548,63 @@ WXDLLEXPORT extern wxWindow* wxFindWinFromHandle(WXHWND hWnd);
 // returns the wxWindow corresponding to the given HWND or NULL.
 WXDLLEXPORT extern wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
 
 // returns the wxWindow corresponding to the given HWND or NULL.
 WXDLLEXPORT extern wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
 
-
 // Get the size of an icon
 WXDLLEXPORT extern wxSize wxGetHiconSize(HICON hicon);
 
 // Get the size of an icon
 WXDLLEXPORT extern wxSize wxGetHiconSize(HICON hicon);
 
+// Lines are drawn differently for WinCE and regular WIN32
+WXDLLEXPORT void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2);
+
+// LocalAlloc should be used on WinCE
+#ifdef __WXWINCE__
+#include <winbase.h>
+
+#if _WIN32_WCE <= 211
+#define GlobalAlloc LocalAlloc
+#define GlobalFree LocalFree
+#define GlobalLock(mem) mem
+#define GlobalUnlock(mem)
+#define GlobalSize LocalSize
+#define GPTR LPTR
+#define GHND LPTR
+#define GMEM_MOVEABLE 0
+#define GMEM_SHARE 0
+#endif
+
+#if 0
+
+HLOCAL
+WINAPI
+LocalAlloc (
+    UINT fuFlags,
+    UINT cbBytes
+    );
+
+HLOCAL
+WINAPI
+LocalFree (
+    HLOCAL hMem
+    );
+
+#ifndef LMEM_FIXED
+#define LMEM_FIXED          0x0000
+#define LMEM_MOVEABLE       0x0002
+#define LMEM_NOCOMPACT      0x0010       /**** Used for Moveable Memory  ***/
+#define LMEM_NODISCARD      0x0020       /**** Ignored *****/
+#define LMEM_ZEROINIT       0x0040
+#define LMEM_MODIFY         0x0080       /*** Used only in LocalReAlloc() **/
+#define LMEM_DISCARDABLE    0x0F00       /**** Ignored ****/
+#define LMEM_VALID_FLAGS    0x0F72
+#define LMEM_INVALID_HANDLE 0x8000
+
+#define LHND                (LMEM_MOVEABLE | LMEM_ZEROINIT)
+#define LPTR                (LMEM_FIXED | LMEM_ZEROINIT)
+#endif
+
+#endif
+    // 0
+
+#endif
+    // __WXWINCE__
 #endif // wxUSE_GUI
 
 #endif
 #endif // wxUSE_GUI
 
 #endif