X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dabc0cd5c1c89f731d818d5d2cfa03bfff8a9db7..f3bd1796cae0fc37a45f6b7a61b473e3ddc652ee:/src/msw/window.cpp?ds=sidebyside diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 88a43b6b33..a1423f78e7 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -51,6 +51,7 @@ #endif #if wxUSE_DRAG_AND_DROP + #include "wx/dataobj.h" #include "wx/msw/ole/droptgt.h" #endif @@ -61,6 +62,10 @@ #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: