]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/private.h
It was not acceptable to call the class method from the static initializer
[wxWidgets.git] / include / wx / msw / private.h
index 3bd6f49620225f84f06cdfbde55f9d547dc85df9..3cda5809f9d459a5f88bf5c9bc5fee4f2bf16024 100644 (file)
@@ -183,22 +183,6 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
 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
 // ---------------------------------------------------------------------------
@@ -302,12 +286,18 @@ HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);
 // 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()
 {
-    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
@@ -346,6 +336,20 @@ inline RECT wxGetClientRect(HWND hwnd)
 // 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
@@ -362,13 +366,13 @@ private:
     DECLARE_NO_COPY_CLASS(ScreenHDC)
 };
 
-// the same as ScreenHDC but for memory DCs: creates the HDC in ctor and
-// destroys it in dtor
+// the same as ScreenHDC but for memory DCs: creates the HDC compatible with
+// the given one (screen by default) in ctor and destroys it in dtor
 class MemoryHDC
 {
 public:
-    MemoryHDC() { m_hdc = ::CreateCompatibleDC(NULL); }
-   ~MemoryHDC() { ::DeleteDC(m_hdc);                  }
+    MemoryHDC(HDC hdc = 0) { m_hdc = ::CreateCompatibleDC(hdc); }
+   ~MemoryHDC() { ::DeleteDC(m_hdc); }
 
     operator HDC() const { return m_hdc; }
 
@@ -401,10 +405,10 @@ private:
 // 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
-class GlobalHandle
+class GlobalPtr
 {
 public:
-    GlobalHandle(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
+    GlobalPtr(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
     {
         m_ptr = ::GlobalLock(hGlobal);
         if ( !m_ptr )
@@ -413,7 +417,7 @@ public:
         }
     }
 
-    ~GlobalHandle()
+    ~GlobalPtr()
     {
         if ( !::GlobalUnlock(m_hGlobal) )
         {
@@ -434,7 +438,7 @@ private:
     HGLOBAL m_hGlobal;
     void *m_ptr;
 
-    DECLARE_NO_COPY_CLASS(GlobalHandle)
+    DECLARE_NO_COPY_CLASS(GlobalPtr)
 };
 
 // ---------------------------------------------------------------------------
@@ -482,9 +486,7 @@ private:
 // global data
 // ---------------------------------------------------------------------------
 
-WXDLLEXPORT_DATA(extern wxChar*) wxBuffer;
-
-WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance;
+WXDLLIMPEXP_DATA_BASE(extern HINSTANCE) wxhInstance;
 
 // ---------------------------------------------------------------------------
 // global functions