]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/window.cpp
IMHO these are the correct flags for borland
[wxWidgets.git] / src / msw / window.cpp
index 88a43b6b3314672f22c4befbf8cf4072512ae999..a1423f78e7e89103db81c26606cfd11a8571d619 100644 (file)
@@ -51,6 +51,7 @@
 #endif
 
 #if     wxUSE_DRAG_AND_DROP
+    #include "wx/dataobj.h"
     #include "wx/msw/ole/droptgt.h"
 #endif
 
     #include "wx/tooltip.h"
 #endif
 
+#if wxUSE_CARET
+    #include "wx/caret.h"
+#endif // wxUSE_CARET
+
 #include "wx/intl.h"
 #include "wx/log.h"
 
@@ -231,12 +236,6 @@ void wxWindow::Init()
     m_doubleClickAllowed = 0;
     m_winCaptured = FALSE;
 
-    // caret stuff: initially there is no caret at all
-    m_caretWidth =
-    m_caretHeight = 0;
-    m_caretEnabled =
-    m_caretShown = FALSE;
-
     m_isBeingDeleted = FALSE;
     m_oldWndProc = 0;
     m_useCtl3D = FALSE;
@@ -1296,51 +1295,47 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     if ( externalLeading ) *externalLeading = tm.tmExternalLeading;
 }
 
+#if wxUSE_CARET
 // ---------------------------------------------------------------------------
 // Caret manipulation
 // ---------------------------------------------------------------------------
 
 void wxWindow::CreateCaret(int w, int h)
 {
-    m_caretWidth = w;
-    m_caretHeight = h;
-    m_caretEnabled = TRUE;
+    SetCaret(new wxCaret(this, w, h));
 }
 
 void wxWindow::CreateCaret(const wxBitmap *WXUNUSED(bitmap))
 {
-    // Not implemented
+    wxFAIL_MSG("not implemented");
 }
 
 void wxWindow::ShowCaret(bool show)
 {
-    if ( m_caretEnabled )
-    {
-        if ( show )
-            ::ShowCaret(GetHwnd());
-        else
-            ::HideCaret(GetHwnd());
-        m_caretShown = show;
-    }
+    wxCHECK_RET( m_caret, "no caret to show" );
+
+    m_caret->Show(show);
 }
 
 void wxWindow::DestroyCaret()
 {
-    m_caretEnabled = FALSE;
+    SetCaret(NULL);
 }
 
 void wxWindow::SetCaretPos(int x, int y)
 {
-    ::SetCaretPos(x, y);
+    wxCHECK_RET( m_caret, "no caret to move" );
+
+    m_caret->Move(x, y);
 }
 
 void wxWindow::GetCaretPos(int *x, int *y) const
 {
-    POINT point;
-    ::GetCaretPos(&point);
-    *x = point.x;
-    *y = point.y;
+    wxCHECK_RET( m_caret, "no caret to get position of" );
+
+    m_caret->GetPosition(x, y);
 }
+#endif // wxUSE_CARET
 
 // ===========================================================================
 // pre/post message processing
@@ -1383,7 +1378,7 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg)
             bool bForward = TRUE,
                  bWindowChange = FALSE;
 
-            switch ( msg->wParam ) 
+            switch ( msg->wParam )
             {
                 case VK_TAB:
                     if ( lDlgCode & DLGC_WANTTAB ) {
@@ -2089,7 +2084,22 @@ bool wxWindow::MSWCreate(int id,
             return FALSE;
         }
 
-        ::MoveWindow(GetHwnd(), x1, y1, width1, height1, FALSE);
+        // ::SetWindowLong(GWL_EXSTYLE) doesn't work for the dialogs, so try
+        // to take care of (at least some) extended style flags ourselves
+        if ( extendedStyle & WS_EX_TOPMOST )
+        {
+            if ( !::SetWindowPos(GetHwnd(), HWND_TOPMOST, 0, 0, 0, 0,
+                                 SWP_NOSIZE | SWP_NOMOVE) )
+            {
+                wxLogLastError("SetWindowPos");
+            }
+        }
+
+        // move the dialog to its initial position without forcing repainting
+        if ( !::MoveWindow(GetHwnd(), x1, y1, width1, height1, FALSE) )
+        {
+            wxLogLastError("MoveWindow");
+        }
     }
     else
     {
@@ -2277,20 +2287,13 @@ bool wxWindow::HandleActivate(int state,
 
 bool wxWindow::HandleSetFocus(WXHWND WXUNUSED(hwnd))
 {
+#if wxUSE_CARET
     // Deal with caret
-    if ( m_caretEnabled && (m_caretWidth > 0) && (m_caretHeight > 0) )
+    if ( m_caret )
     {
-        if ( ::CreateCaret(GetHwnd(), NULL, m_caretWidth, m_caretHeight) )
-        {
-            if ( m_caretShown )
-            {
-                if ( !::ShowCaret(GetHwnd()) )
-                    wxLogLastError("ShowCaret");
-            }
-        }
-        else
-            wxLogLastError("CreateCaret");
+        m_caret->OnSetFocus();
     }
+#endif // wxUSE_CARET
 
     // panel wants to track the window which was the last to have focus in it
     wxWindow *parent = GetParent();
@@ -2307,12 +2310,13 @@ bool wxWindow::HandleSetFocus(WXHWND WXUNUSED(hwnd))
 
 bool wxWindow::HandleKillFocus(WXHWND WXUNUSED(hwnd))
 {
+#if wxUSE_CARET
     // Deal with caret
-    if ( m_caretEnabled )
+    if ( m_caret )
     {
-        if ( !::DestroyCaret() )
-            wxLogLastError("DestroyCaret");
+        m_caret->OnKillFocus();
     }
+#endif // wxUSE_CARET
 
     wxFocusEvent event(wxEVT_KILL_FOCUS, m_windowId);
     event.SetEventObject(this);
@@ -3093,7 +3097,7 @@ bool wxWindow::MSWOnScroll(int orientation, WXWORD wParam,
             return child->MSWOnScroll(orientation, wParam, pos, control);
     }
 
-    wxScrollEvent event;
+    wxScrollWinEvent event;
     event.SetPosition(pos);
     event.SetOrientation(orientation);
     event.m_eventObject = this;
@@ -3101,32 +3105,32 @@ bool wxWindow::MSWOnScroll(int orientation, WXWORD wParam,
     switch ( wParam )
     {
     case SB_TOP:
-        event.m_eventType = wxEVT_SCROLL_TOP;
+        event.m_eventType = wxEVT_SCROLLWIN_TOP;
         break;
 
     case SB_BOTTOM:
-        event.m_eventType = wxEVT_SCROLL_BOTTOM;
+        event.m_eventType = wxEVT_SCROLLWIN_BOTTOM;
         break;
 
     case SB_LINEUP:
-        event.m_eventType = wxEVT_SCROLL_LINEUP;
+        event.m_eventType = wxEVT_SCROLLWIN_LINEUP;
         break;
 
     case SB_LINEDOWN:
-        event.m_eventType = wxEVT_SCROLL_LINEDOWN;
+        event.m_eventType = wxEVT_SCROLLWIN_LINEDOWN;
         break;
 
     case SB_PAGEUP:
-        event.m_eventType = wxEVT_SCROLL_PAGEUP;
+        event.m_eventType = wxEVT_SCROLLWIN_PAGEUP;
         break;
 
     case SB_PAGEDOWN:
-        event.m_eventType = wxEVT_SCROLL_PAGEDOWN;
+        event.m_eventType = wxEVT_SCROLLWIN_PAGEDOWN;
         break;
 
     case SB_THUMBTRACK:
     case SB_THUMBPOSITION:
-        event.m_eventType = wxEVT_SCROLL_THUMBTRACK;
+        event.m_eventType = wxEVT_SCROLLWIN_THUMBTRACK;
         break;
 
     default: