#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"
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;
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
bool bForward = TRUE,
bWindowChange = FALSE;
- switch ( msg->wParam )
+ switch ( msg->wParam )
{
case VK_TAB:
if ( lDlgCode & DLGC_WANTTAB ) {
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
{
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();
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);
return child->MSWOnScroll(orientation, wParam, pos, control);
}
- wxScrollEvent event;
+ wxScrollWinEvent event;
event.SetPosition(pos);
event.SetOrientation(orientation);
event.m_eventObject = this;
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: