#endif
#endif
-#if wxUSE_PENWIN
- WXDLLEXPORT void wxRegisterPenWin();
- WXDLLEXPORT void wxCleanUpPenWin();
- WXDLLEXPORT void wxEnablePenAppHooks (bool hook);
-#endif // wxUSE_PENWIN
-
-#if wxUSE_ITSY_BITSY
- #define IBS_HORZCAPTION 0x4000L
- #define IBS_VERTCAPTION 0x8000L
-
- UINT WINAPI ibGetCaptionSize( HWND hWnd ) ;
- UINT WINAPI ibSetCaptionSize( HWND hWnd, UINT nSize ) ;
- LRESULT WINAPI ibDefWindowProc( HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam ) ;
- VOID WINAPI ibAdjustWindowRect( HWND hWnd, LPRECT lprc ) ;
-#endif // wxUSE_ITSY_BITSY
-
/*
* Decide what window classes we're going to use
* for this combination of CTl3D/FAFA settings
|| defined(__BORLANDC__) \
|| defined(__DMC__) \
|| defined(__WATCOMC__) \
- || (defined(__GNUWIN32__) || defined(__MINGW32__)) \
+ || defined(__MINGW32__) \
|| (defined(__MWERKS__) && defined(__MSL__))
#define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd))
#endif
+// close the handle in the class dtor
+class AutoHANDLE
+{
+public:
+ wxEXPLICIT AutoHANDLE(HANDLE handle) : m_handle(handle) { }
+
+ bool IsOk() const { return m_handle != INVALID_HANDLE_VALUE; }
+ operator HANDLE() const { return m_handle; }
+
+ ~AutoHANDLE() { if ( IsOk() ) ::CloseHandle(m_handle); }
+
+protected:
+ HANDLE m_handle;
+};
+
+// 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));
+
+ // explicit qualification is required here for this to be valid C++
+ this->cbSize = sizeof(T);
+ }
+};
+
+
#if wxUSE_GUI
#include <wx/gdicmn.h>
// 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));
-
- // explicit qualification is required here for this to be valid C++
- this->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
HGDIOBJ m_gdiobj;
};
-// a class for temporary bitmaps
-class CompatibleBitmap : private AutoGDIObject
+// TODO: all this asks for using a AutoHandler<T, CreateFunc> template...
+
+// a class for temporary pens
+class AutoHBRUSH : private AutoGDIObject
+{
+public:
+ AutoHBRUSH(COLORREF col)
+ : AutoGDIObject(::CreateSolidBrush(col)) { }
+
+ operator HBRUSH() const { return (HBRUSH)GetObject(); }
+};
+
+// a class for temporary pens
+class AutoHPEN : private AutoGDIObject
+{
+public:
+ AutoHPEN(COLORREF col)
+ : AutoGDIObject(::CreatePen(PS_SOLID, 0, col)) { }
+
+ operator HPEN() const { return (HPEN)GetObject(); }
+};
+
+// classes for temporary bitmaps
+class AutoHBITMAP : private AutoGDIObject
+{
+public:
+ AutoHBITMAP(HBITMAP hbmp) : AutoGDIObject(hbmp) { }
+
+ operator HBITMAP() const { return (HBITMAP)GetObject(); }
+};
+
+class CompatibleBitmap : public AutoHBITMAP
{
public:
CompatibleBitmap(HDC hdc, int w, int h)
- : AutoGDIObject(::CreateCompatibleBitmap(hdc, w, h))
+ : AutoHBITMAP(::CreateCompatibleBitmap(hdc, w, h))
{
}
+};
- operator HBITMAP() const { return (HBITMAP)GetObject(); }
+class MonoBitmap : public AutoHBITMAP
+{
+public:
+ MonoBitmap(int w, int h)
+ : AutoHBITMAP(::CreateBitmap(w, h, 1, 1, 0))
+ {
+ }
};
// class automatically destroys the region object
DECLARE_NO_COPY_CLASS(HDCClipper)
};
+// smart buffeer using GlobalAlloc/GlobalFree()
+class GlobalPtr
+{
+public:
+ // allocates a block of given size
+ GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE)
+ {
+ m_hGlobal = ::GlobalAlloc(flags, size);
+ if ( !m_hGlobal )
+ wxLogLastError(_T("GlobalAlloc"));
+ }
+
+ ~GlobalPtr()
+ {
+ if ( m_hGlobal && ::GlobalFree(m_hGlobal) )
+ wxLogLastError(_T("GlobalFree"));
+ }
+
+ // implicit conversion
+ operator HGLOBAL() const { return m_hGlobal; }
+
+private:
+ HGLOBAL m_hGlobal;
+
+ DECLARE_NO_COPY_CLASS(GlobalPtr)
+};
+
// 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 GlobalPtr
+class GlobalPtrLock
{
public:
- GlobalPtr(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
+ GlobalPtrLock(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
{
m_ptr = GlobalLock(hGlobal);
if ( !m_ptr )
}
}
- ~GlobalPtr()
+ ~GlobalPtrLock()
{
if ( !GlobalUnlock(m_hGlobal) )
{
HGLOBAL m_hGlobal;
void *m_ptr;
- DECLARE_NO_COPY_CLASS(GlobalPtr)
+ DECLARE_NO_COPY_CLASS(GlobalPtrLock)
};
// register the class when it is first needed and unregister it in dtor
return wxGetFullModuleName((HMODULE)wxGetInstance());
}
+// return the run-time version of the OS in a format similar to
+// WINVER/_WIN32_WINNT compile-time macros:
+//
+// 0x0300 Windows NT 3.51
+// 0x0400 Windows 95, NT4
+// 0x0410 Windows 98
+// 0x0500 Windows ME, 2000
+// 0x0501 Windows XP
+// 0x0502 Windows 2003
+// 0x0600 Longhorn
+//
+// for the other Windows versions 0 is currently returned
+enum wxWinVersion
+{
+ wxWinVersion_Unknown = 0,
+
+ wxWinVersion_3 = 0x0300,
+ wxWinVersion_NT3 = wxWinVersion_3,
+
+ wxWinVersion_4 = 0x0400,
+ wxWinVersion_95 = wxWinVersion_4,
+ wxWinVersion_NT4 = wxWinVersion_4,
+ wxWinVersion_98 = 0x0410,
+
+ wxWinVersion_5 = 0x0500,
+ wxWinVersion_ME = wxWinVersion_5,
+ wxWinVersion_NT5 = wxWinVersion_5,
+ wxWinVersion_2000 = wxWinVersion_5,
+ wxWinVersion_XP = 0x0501,
+ wxWinVersion_2003 = 0x0502,
+
+ wxWinVersion_6 = 0x0600,
+ wxWinVersion_NT6 = 0x0600
+};
+
+WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion();
+
#if wxUSE_GUI
// cursor stuff
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
-// Deferred window moving
-bool wxMoveWindowDeferred(HDWP& hdwp, wxWindowBase* win, HWND hWnd, int x, int y, int width, int height);
-
// ----------------------------------------------------------------------------
// functions mapping HWND to wxWindow
// ----------------------------------------------------------------------------