]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/private.h
update mac gl, after rev 50900
[wxWidgets.git] / include / wx / msw / private.h
index dd0bd996a37836fcae9a5fd3f6eff4811a049b44..7944e1b9767fb493942775a28a2e8af60abb7abd 100644 (file)
     #include "wx/msw/microwin.h"
 #endif
 
-// Include fixes for MSLU:
-#include "wx/msw/mslu.h"
-
 #include "wx/log.h"
 
-class WXDLLEXPORT wxFont;
-class WXDLLEXPORT wxWindow;
-class WXDLLEXPORT wxWindowBase;
+class WXDLLIMPEXP_FWD_CORE wxFont;
+class WXDLLIMPEXP_FWD_CORE wxWindow;
+class WXDLLIMPEXP_FWD_CORE wxWindowBase;
 
 // ---------------------------------------------------------------------------
 // private constants
@@ -166,6 +163,7 @@ extern LONG APIENTRY _EXPORT
 // Intel, Visual Age.
 #if defined(__WXWINCE__)
     #define wxGetOSFHandle(fd) ((HANDLE)fd)
+    #define wxOpenOSFHandle(h, flags) ((int)wxPtrToUInt(h))
 #elif defined(__CYGWIN__)
     #define wxGetOSFHandle(fd) ((HANDLE)get_osfhandle(fd))
 #elif defined(__VISUALC__) \
@@ -175,6 +173,8 @@ extern LONG APIENTRY _EXPORT
    || defined(__MINGW32__) \
    || (defined(__MWERKS__) && defined(__MSL__))
     #define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd))
+    #define wxOpenOSFHandle(h, flags) (_open_osfhandle(wxPtrToUInt(h), flags))
+    #define wx_fdopen _fdopen
 #endif
 
 // close the handle in the class dtor
@@ -213,6 +213,11 @@ struct WinStruct : public T
 #include "wx/gdicmn.h"
 #include "wx/colour.h"
 
+#include "wx/msw/dc.h"
+#include "wx/msw/dcclient.h"
+#include "wx/msw/dcmemory.h"
+
+
 // make conversion from wxColour and COLORREF a bit less painful
 inline COLORREF wxColourToRGB(const wxColour& c)
 {
@@ -311,21 +316,32 @@ HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);
     #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
 #endif // GET_X_LPARAM
 
-// get the current state of SHIFT/CTRL keys
-inline bool wxIsShiftDown()
+// get the current state of SHIFT/CTRL/ALT keys
+inline bool wxIsModifierDown(int vk)
 {
-//    return (::GetKeyState(VK_SHIFT) & 0x100) != 0;
-    // Returns different negative values on WinME and WinNT,
+    // GetKeyState() returns different negative values on WinME and WinNT,
     // so simply test for negative value.
-    return ::GetKeyState(VK_SHIFT) < 0;
+    return ::GetKeyState(vk) < 0;
+}
+
+inline bool wxIsShiftDown()
+{
+    return wxIsModifierDown(VK_SHIFT);
 }
 
 inline bool wxIsCtrlDown()
 {
-//    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;
+    return wxIsModifierDown(VK_CONTROL);
+}
+
+inline bool wxIsAltDown()
+{
+    return wxIsModifierDown(VK_MENU);
+}
+
+inline bool wxIsAnyModifierDown()
+{
+    return wxIsShiftDown() || wxIsCtrlDown() || wxIsAltDown();
 }
 
 // wrapper around GetWindowRect() and GetClientRect() APIs doing error checking
@@ -406,29 +422,49 @@ private:
 // dtor
 class SelectInHDC
 {
+private:
+    void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); }
+
 public:
-    SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
-        { m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
+    SelectInHDC() : m_hdc(NULL) { }
+    SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { DoInit(hgdiobj); }
 
-   ~SelectInHDC() { ::SelectObject(m_hdc, m_hgdiobj); }
+    void Init(HDC hdc, HGDIOBJ hgdiobj)
+    {
+        wxASSERT_MSG( !m_hdc, _T("initializing twice?") );
 
-   // return true if the object was successfully selected
-   operator bool() const { return m_hgdiobj != 0; }
+        m_hdc = hdc;
+
+        DoInit(hgdiobj);
+    }
+
+    ~SelectInHDC() { if ( m_hdc ) ::SelectObject(m_hdc, m_hgdiobj); }
+
+    // return true if the object was successfully selected
+    operator bool() const { return m_hgdiobj != 0; }
 
 private:
-   HDC m_hdc;
-   HGDIOBJ m_hgdiobj;
+    HDC m_hdc;
+    HGDIOBJ m_hgdiobj;
 
-   DECLARE_NO_COPY_CLASS(SelectInHDC)
+    DECLARE_NO_COPY_CLASS(SelectInHDC)
 };
 
 // a class which cleans up any GDI object
 class AutoGDIObject
 {
 protected:
+    AutoGDIObject() { m_gdiobj = NULL; }
     AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { }
     ~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_gdiobj); }
 
+    void InitGdiobj(HGDIOBJ gdiobj)
+    {
+        wxASSERT_MSG( !m_gdiobj, _T("initializing twice?") );
+
+        m_gdiobj = gdiobj;
+    }
+
     HGDIOBJ GetObject() const { return m_gdiobj; }
 
 private:
@@ -437,7 +473,7 @@ private:
 
 // TODO: all this asks for using a AutoHandler<T, CreateFunc> template...
 
-// a class for temporary pens
+// a class for temporary brushes
 class AutoHBRUSH : private AutoGDIObject
 {
 public:
@@ -447,6 +483,22 @@ public:
     operator HBRUSH() const { return (HBRUSH)GetObject(); }
 };
 
+// a class for temporary fonts
+class AutoHFONT : private AutoGDIObject
+{
+private:
+public:
+    AutoHFONT()
+        : AutoGDIObject() { }
+
+    AutoHFONT(const LOGFONT& lf)
+        : AutoGDIObject(::CreateFontIndirect(&lf)) { }
+
+    void Init(const LOGFONT& lf) { InitGdiobj(::CreateFontIndirect(&lf)); }
+
+    operator HFONT() const { return (HFONT)GetObject(); }
+};
+
 // a class for temporary pens
 class AutoHPEN : private AutoGDIObject
 {
@@ -656,7 +708,7 @@ public:
     {
         if ( IsRegistered() )
         {
-            if ( !::UnregisterClass(m_clsname, wxhInstance) )
+            if ( !::UnregisterClass(m_clsname.wx_str(), wxhInstance) )
             {
                 wxLogLastError(_T("UnregisterClass"));
             }
@@ -788,7 +840,8 @@ enum wxWinVersion
     wxWinVersion_2003 = 0x0502,
 
     wxWinVersion_6 = 0x0600,
-    wxWinVersion_NT6 = 0x0600
+    wxWinVersion_Vista = wxWinVersion_6,
+    wxWinVersion_NT6 = wxWinVersion_6
 };
 
 WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion();
@@ -818,7 +871,7 @@ extern WXDLLEXPORT wxString wxGetWindowClass(WXHWND hWnd);
 
 // get the window id (should be unsigned, hence this is not wxWindowID which
 // is, for mainly historical reasons, signed)
-extern WXDLLEXPORT WXWORD wxGetWindowId(WXHWND hWnd);
+extern WXDLLEXPORT int wxGetWindowId(WXHWND hWnd);
 
 // check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are
 // different