]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/private.h
added GAUGE standard colour and use it in DrawProgressBar() if the colour
[wxWidgets.git] / include / wx / msw / private.h
index 176aebd12302a71e538f9e98efede479dd30508c..14f3b2a2eaa23277a3f84ce6ae20e162a5eafbb1 100644 (file)
@@ -21,8 +21,8 @@
 #include <windows.h>
 
 #ifdef __WXMICROWIN__
 #include <windows.h>
 
 #ifdef __WXMICROWIN__
-/* Extra prototypes and symbols not defined by MicroWindows */
-#include "wx/msw/microwin.h"
+    // Extra prototypes and symbols not defined by MicroWindows
+    #include "wx/msw/microwin.h"
 #endif
 
 // undefine conflicting symbols which were defined in windows.h
 #endif
 
 // undefine conflicting symbols which were defined in windows.h
@@ -204,7 +204,12 @@ extern LONG APIENTRY _EXPORT
 // make conversion from wxColour and COLORREF a bit less painful
 inline COLORREF wxColourToRGB(const wxColour& c)
 {
 // make conversion from wxColour and COLORREF a bit less painful
 inline COLORREF wxColourToRGB(const wxColour& c)
 {
-    return RGB(c.Red(), c.Green(), c.Blue());
+    return PALETTERGB(c.Red(), c.Green(), c.Blue());
+}
+
+inline wxColour wxRGBToColour(COLORREF rgb)
+{
+    return wxColour(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
 }
 
 inline void wxRGBToColour(wxColour& c, COLORREF rgb)
 }
 
 inline void wxRGBToColour(wxColour& c, COLORREF rgb)
@@ -212,6 +217,31 @@ inline void wxRGBToColour(wxColour& c, COLORREF rgb)
     c.Set(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
 }
 
     c.Set(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
 }
 
+// get the standard colour map for some standard colours - see comment in this
+// function to understand why is it needed and when should it be used
+//
+// it returns a wxCOLORMAP (can't use COLORMAP itself here as comctl32.dll
+// might be not included/available) array of size wxSTD_COLOUR_MAX
+//
+// NB: if you change these colours, update wxBITMAP_STD_COLOURS in the
+//     resources as well: it must have the same number of pixels!
+enum wxSTD_COLOUR
+{
+    wxSTD_COL_BTNTEXT,
+    wxSTD_COL_BTNSHADOW,
+    wxSTD_COL_BTNFACE,
+    wxSTD_COL_BTNHIGHLIGHT,
+    wxSTD_COL_MAX,
+};
+
+struct WXDLLEXPORT wxCOLORMAP
+{
+    COLORREF from, to;
+};
+
+// this function is implemented in src/msw/window.cpp
+extern wxCOLORMAP *wxGetStdColourMap();
+
 // copy Windows RECT to our wxRect
 inline void wxCopyRECTToRect(const RECT& r, wxRect& rect)
 {
 // copy Windows RECT to our wxRect
 inline void wxCopyRECTToRect(const RECT& r, wxRect& rect)
 {
@@ -291,14 +321,47 @@ inline RECT wxGetClientRect(HWND hwnd)
 class ScreenHDC
 {
 public:
 class ScreenHDC
 {
 public:
-    ScreenHDC() { m_hdc = GetDC(NULL);    }
-   ~ScreenHDC() { ReleaseDC(NULL, m_hdc); }
-    operator HDC() const { return m_hdc;  }
+    ScreenHDC() { m_hdc = ::GetDC(NULL);    }
+   ~ScreenHDC() { ::ReleaseDC(NULL, m_hdc); }
+
+    operator HDC() const { return m_hdc; }
 
 private:
     HDC m_hdc;
 };
 
 
 private:
     HDC m_hdc;
 };
 
+// the same as ScreenHDC but for memory DCs: creates the HDC in ctor and
+// destroys it in dtor
+class MemoryHDC
+{
+public:
+    MemoryHDC() { m_hdc = ::CreateCompatibleDC(NULL); }
+   ~MemoryHDC() { ::DeleteObject(m_hdc);              }
+
+    operator HDC() const { return m_hdc; }
+
+private:
+    HDC m_hdc;
+};
+
+// a class which selects a GDI object into a DC in its ctor and deselects in
+// dtor
+class SelectInHDC
+{
+public:
+    SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
+        { m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
+
+   ~SelectInHDC() { ::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;
+};
+
 // ---------------------------------------------------------------------------
 // macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
 // returns Foo cast to the Windows type for oruselves, while GetFooOf() takes
 // ---------------------------------------------------------------------------
 // macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
 // returns Foo cast to the Windows type for oruselves, while GetFooOf() takes
@@ -332,6 +395,9 @@ private:
 #define GetHfont()              ((HFONT)GetHFONT())
 #define GetHfontOf(font)        ((HFONT)(font).GetHFONT())
 
 #define GetHfont()              ((HFONT)GetHFONT())
 #define GetHfontOf(font)        ((HFONT)(font).GetHFONT())
 
+#define GetHpalette()           ((HPALETTE)GetHPALETTE())
+#define GetHpaletteOf(pal)      ((HPALETTE)(pal)->GetHPALETTE())
+
 #define GetHrgn()               ((HRGN)GetHRGN())
 #define GetHrgnOf(rgn)          ((HRGN)(rgn).GetHRGN())
 
 #define GetHrgn()               ((HRGN)GetHRGN())
 #define GetHrgnOf(rgn)          ((HRGN)(rgn).GetHRGN())
 
@@ -388,6 +454,9 @@ WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd);
 // is, for mainly historical reasons, signed)
 WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd);
 
 // is, for mainly historical reasons, signed)
 WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd);
 
+// check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are different
+extern bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc);
+
 // Does this window style specify any border?
 inline bool wxStyleHasBorder(long style)
 {
 // Does this window style specify any border?
 inline bool wxStyleHasBorder(long style)
 {