]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/window.cpp
wxX11 STL-ification.
[wxWidgets.git] / src / msw / window.cpp
index e49dbd008268eda5fe67e22c7e9d751a5e4fbabc..b0fa0492c15e7193076692275557c121b7258494 100644 (file)
@@ -91,6 +91,7 @@
 
 #include "wx/textctrl.h"
 #include "wx/notebook.h"
+#include "wx/listctrl.h"
 
 #include <string.h>
 
@@ -247,7 +248,7 @@ IMPLEMENT_DYNAMIC_CLASS_XTI_CALLBACK(wxWindow, wxWindowBase,"wx/window.h", wxWin
 
 // make wxWindowList known before the property is used
 
-WX_COLLECTION_TYPE_INFO( wxWindow* , wxWindowList ) ;
+wxCOLLECTION_TYPE_INFO( wxWindow* , wxWindowList ) ;
 
 template<> void wxCollectionToVariantArray( wxWindowList const &theList, wxxVariantArray &value)
 {
@@ -256,81 +257,82 @@ template<> void wxCollectionToVariantArray( wxWindowList const &theList, wxxVari
 
 WX_DEFINE_FLAGS( wxWindowStyle )
 
-WX_BEGIN_FLAGS( wxWindowStyle )
+wxBEGIN_FLAGS( wxWindowStyle )
     // new style border flags, we put them first to
     // use them for streaming out
-    WX_FLAGS_MEMBER(wxBORDER_SIMPLE)
-    WX_FLAGS_MEMBER(wxBORDER_SUNKEN)
-    WX_FLAGS_MEMBER(wxBORDER_DOUBLE)
-    WX_FLAGS_MEMBER(wxBORDER_RAISED)
-    WX_FLAGS_MEMBER(wxBORDER_STATIC)
-    WX_FLAGS_MEMBER(wxBORDER_NONE)
+
+    wxFLAGS_MEMBER(wxBORDER_SIMPLE)
+    wxFLAGS_MEMBER(wxBORDER_SUNKEN)
+    wxFLAGS_MEMBER(wxBORDER_DOUBLE)
+    wxFLAGS_MEMBER(wxBORDER_RAISED)
+    wxFLAGS_MEMBER(wxBORDER_STATIC)
+    wxFLAGS_MEMBER(wxBORDER_NONE)
     
     // old style border flags
-    WX_FLAGS_MEMBER(wxSIMPLE_BORDER)
-    WX_FLAGS_MEMBER(wxSUNKEN_BORDER)
-    WX_FLAGS_MEMBER(wxDOUBLE_BORDER)
-    WX_FLAGS_MEMBER(wxRAISED_BORDER)
-    WX_FLAGS_MEMBER(wxSTATIC_BORDER)
-    WX_FLAGS_MEMBER(wxNO_BORDER)
+    wxFLAGS_MEMBER(wxSIMPLE_BORDER)
+    wxFLAGS_MEMBER(wxSUNKEN_BORDER)
+    wxFLAGS_MEMBER(wxDOUBLE_BORDER)
+    wxFLAGS_MEMBER(wxRAISED_BORDER)
+    wxFLAGS_MEMBER(wxSTATIC_BORDER)
+    wxFLAGS_MEMBER(wxNO_BORDER)
 
     // standard window styles
-    WX_FLAGS_MEMBER(wxTAB_TRAVERSAL)
-    WX_FLAGS_MEMBER(wxCLIP_CHILDREN)
-    WX_FLAGS_MEMBER(wxTRANSPARENT_WINDOW)
-    WX_FLAGS_MEMBER(wxWANTS_CHARS)
-    WX_FLAGS_MEMBER(wxNO_FULL_REPAINT_ON_RESIZE)
-    WX_FLAGS_MEMBER(wxALWAYS_SHOW_SB )
-    WX_FLAGS_MEMBER(wxVSCROLL)
-    WX_FLAGS_MEMBER(wxHSCROLL)
-
-WX_END_FLAGS( wxWindowStyle )
-
-WX_BEGIN_PROPERTIES_TABLE(wxWindow)
-       WX_EVENT_PROPERTY( Close , wxEVT_CLOSE_WINDOW , wxCloseEvent)
-       WX_EVENT_PROPERTY( Create , wxEVT_CREATE , wxWindowCreateEvent )
-       WX_EVENT_PROPERTY( Destroy , wxEVT_DESTROY , wxWindowDestroyEvent )
+    wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
+    wxFLAGS_MEMBER(wxCLIP_CHILDREN)
+    wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
+    wxFLAGS_MEMBER(wxWANTS_CHARS)
+    wxFLAGS_MEMBER(wxNO_FULL_REPAINT_ON_RESIZE)
+    wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
+    wxFLAGS_MEMBER(wxVSCROLL)
+    wxFLAGS_MEMBER(wxHSCROLL)
+
+wxEND_FLAGS( wxWindowStyle )
+
+wxBEGIN_PROPERTIES_TABLE(wxWindow)
+       wxEVENT_PROPERTY( Close , wxEVT_CLOSE_WINDOW , wxCloseEvent)
+       wxEVENT_PROPERTY( Create , wxEVT_CREATE , wxWindowCreateEvent )
+       wxEVENT_PROPERTY( Destroy , wxEVT_DESTROY , wxWindowDestroyEvent )
     // Always constructor Properties first
 
-    WX_READONLY_PROPERTY( Parent,wxWindow*, GetParent,  , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
-       WX_PROPERTY( Id,wxWindowID, SetId, GetId, -1, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
-       WX_PROPERTY( Position,wxPoint, SetPosition , GetPosition, wxPoint(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // pos
-       WX_PROPERTY( Size,wxSize, SetSize, GetSize, wxSize(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // size
-    WX_PROPERTY( WindowStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
+    wxREADONLY_PROPERTY( Parent,wxWindow*, GetParent,  , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+       wxPROPERTY( Id,wxWindowID, SetId, GetId, -1, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+       wxPROPERTY( Position,wxPoint, SetPosition , GetPosition, wxPoint(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // pos
+       wxPROPERTY( Size,wxSize, SetSize, GetSize, wxSize(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // size
+    wxPROPERTY( WindowStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
 
     // Then all relations of the object graph
 
-    WX_READONLY_PROPERTY_COLLECTION( Children , wxWindowList , wxWindowBase* , GetWindowChildren , wxPROP_OBJECT_GRAPH /*flags*/ , wxT("Helpstring") , wxT("group"))
+    wxREADONLY_PROPERTY_COLLECTION( Children , wxWindowList , wxWindowBase* , GetWindowChildren , wxPROP_OBJECT_GRAPH /*flags*/ , wxT("Helpstring") , wxT("group"))
 
    // and finally all other properties
 
-       WX_PROPERTY( ExtraStyle , long , SetExtraStyle , GetExtraStyle , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // extstyle
-       WX_PROPERTY( BackgroundColour , wxColour , SetBackgroundColour , GetBackgroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // bg
-       WX_PROPERTY( ForegroundColour , wxColour , SetForegroundColour , GetForegroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // fg
-       WX_PROPERTY( Enabled , bool , Enable , IsEnabled , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
-       WX_PROPERTY( Shown , bool , Show , IsShown , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+       wxPROPERTY( ExtraStyle , long , SetExtraStyle , GetExtraStyle , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // extstyle
+       wxPROPERTY( BackgroundColour , wxColour , SetBackgroundColour , GetBackgroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // bg
+       wxPROPERTY( ForegroundColour , wxColour , SetForegroundColour , GetForegroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // fg
+       wxPROPERTY( Enabled , bool , Enable , IsEnabled , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+       wxPROPERTY( Shown , bool , Show , IsShown , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
 #if 0
     // possible property candidates (not in xrc) or not valid in all subclasses
-       WX_PROPERTY( Title,wxString, SetTitle, GetTitle, wxT("") )
-       WX_PROPERTY( Font , wxFont , SetFont , GetWindowFont  , )
-       WX_PROPERTY( Label,wxString, SetLabel, GetLabel, wxT("") )
+       wxPROPERTY( Title,wxString, SetTitle, GetTitle, wxT("") )
+       wxPROPERTY( Font , wxFont , SetFont , GetWindowFont  , )
+       wxPROPERTY( Label,wxString, SetLabel, GetLabel, wxT("") )
        // MaxHeight, Width , MinHeight , Width
        // TODO switch label to control and title to toplevels
 
-       WX_PROPERTY( ThemeEnabled , bool , SetThemeEnabled , GetThemeEnabled , )
-       //WX_PROPERTY( Cursor , wxCursor , SetCursor , GetCursor , )
-       // WX_PROPERTY( ToolTip , wxString , SetToolTip , GetToolTipText , )
-       WX_PROPERTY( AutoLayout , bool , SetAutoLayout , GetAutoLayout , )
+       wxPROPERTY( ThemeEnabled , bool , SetThemeEnabled , GetThemeEnabled , )
+       //wxPROPERTY( Cursor , wxCursor , SetCursor , GetCursor , )
+       // wxPROPERTY( ToolTip , wxString , SetToolTip , GetToolTipText , )
+       wxPROPERTY( AutoLayout , bool , SetAutoLayout , GetAutoLayout , )
 
 
 
 #endif
-WX_END_PROPERTIES_TABLE()
+wxEND_PROPERTIES_TABLE()
 
-WX_BEGIN_HANDLERS_TABLE(wxWindow)
-WX_END_HANDLERS_TABLE()
+wxBEGIN_HANDLERS_TABLE(wxWindow)
+wxEND_HANDLERS_TABLE()
 
-WX_CONSTRUCTOR_DUMMY(wxWindow)
+wxCONSTRUCTOR_DUMMY(wxWindow)
 
 #else
     IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
@@ -2319,6 +2321,20 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
                 break;
             }
 
+        case WM_PRINT:
+            {
+                // Don't call the wx handlers in this case
+                if ( wxIsKindOf(this, wxListCtrl) )
+                    break;
+
+                if ( lParam & PRF_ERASEBKGND )
+                    HandleEraseBkgnd((WXHDC)(HDC)wParam);
+
+                wxPaintDCEx dc((wxWindow *)this, (WXHDC)wParam);
+                processed = HandlePaint();
+            }
+            break;
+
         case WM_CLOSE:
 #ifdef __WXUNIVERSAL__
             // Universal uses its own wxFrame/wxDialog, so we don't receive
@@ -3102,9 +3118,33 @@ bool wxWindowMSW::HandleTooltipNotify(WXUINT code,
         // in Unicode mode this is just what we need
         ttText->lpszText = (wxChar *)ttip.c_str();
 #else // !Unicode
+/*
         MultiByteToWideChar(CP_ACP, 0, ttip, ttip.length()+1,
                             (wchar_t *)ttText->szText,
                             sizeof(ttText->szText) / sizeof(wchar_t));
+*/
+        // Fix by dimitrishortcut: see patch 771772
+
+        // FIXME: szText has a max of 80 bytes, so limit the tooltip string
+        // length accordingly. Ideally lpszText should be used, but who
+        // would be responsible for freeing the buffer?
+
+        // Maximum length of a tip is 39 characters. 39 is 80/2 minus 1 byte
+        // needed for NULL character.
+        size_t tipLength = wxMin(ttip.Len(), 39);
+
+        // Convert to WideChar without adding the NULL character. The NULL
+        // character is added afterwards (Could have used ttip.Left(tipLength)
+        // and a cchMultiByte parameter of tipLength+1, but this is more
+        //efficient.
+        ::MultiByteToWideChar(CP_ACP, 0, ttip, tipLength,
+                             (wchar_t *)ttText->szText,
+                             sizeof(ttText->szText) / sizeof(wchar_t));
+
+        // Add the NULL character.
+        ttText->szText[tipLength*2+0] = '\0';
+        ttText->szText[tipLength*2+1] = '\0';
+
 #endif // Unicode/!Unicode
     }