#endif
#ifndef WX_PRECOMP
+#include "wx/event.h"
#include "wx/app.h"
#include "wx/dcclient.h"
#endif
+#include "wx/control.h"
+
#include "wx/msw/private.h"
-#if defined(__WIN95__) && !defined(__GNUWIN32__)
+#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__)
#include <commctrl.h>
#endif
m_backgroundColour = *wxWHITE;
m_foregroundColour = *wxBLACK;
m_callback = 0;
+// m_windowCursor = wxNullCursor; // To avoid the standard cursor being used
}
wxControl::~wxControl(void)
wxWindow *parent = (wxWindow *)GetParent();
if (parent)
{
- if (parent->GetDefaultItem() == this)
+ if (parent->GetDefaultItem() == (wxButton*) this)
parent->SetDefaultItem(NULL);
}
}
wxString wxControl::GetLabel(void) const
{
- wxBuffer[0] = 0;
- if (GetHWND())
- GetWindowText((HWND)GetHWND(), wxBuffer, 1000);
+ wxBuffer[0] = 0;
+ if (GetHWND())
+ {
+ int len = GetWindowText((HWND)GetHWND(), wxBuffer, 256);
+ wxBuffer[len] = 0;
+ }
return wxString(wxBuffer);
}
}
*/
-#if 0
-// We can't rely on Windows giving us events corresponding to the wxWindows Z-ordering.
-// E.g. we can't push a wxGroupBox to the back for editing purposes.
-// Convert the item event to parent coordinates, then search for
-// an item that could receive this event.
-wxControl *wxFakeItemEvent(wxWindow *parent, wxControl *item, wxMouseEvent& event)
-{
- int x, y;
- item->GetPosition(&x, &y);
- event.m_x += x;
- event.m_y += y;
-
- wxNode *node = parent->GetChildren()->Last();
- while (node)
- {
- wxControl *newItem = (wxControl *)node->Data();
- if (newItem->IsSelected() && newItem->SelectionHandleHitTest(event.x, event.GetY()))
- {
- // This event belongs to the panel.
- parent->GetEventHandler()->OldOnMouseEvent(event);
- return NULL;
- }
- else if (newItem->HitTest(event.x, event.GetY()))
- {
- int x1, y1;
- newItem->GetPosition(&x1, &y1);
- event.x -= x1;
- event.GetY() -= y1;
- newItem->OldOnMouseEvent(event);
- return newItem;
- }
- node = node->Previous();
- }
- // No takers, so do what we would have done anyway.
- event.x -= x;
- event.y -= y;
- item->OldOnMouseEvent(event);
- return item;
-}
-#endif
-
-void wxControl::MSWOnMouseMove(const int x, const int y, const WXUINT flags)
+void wxControl::MSWOnMouseMove(int x, int y, WXUINT flags)
{
- // 'normal' move event...
- // Set cursor, but only if we're not in 'busy' mode
-
/*
// Trouble with this is that it sets the cursor for controls too :-(
if (m_windowCursor.Ok() && !wxIsBusy())
::SetCursor(m_windowCursor.GetHCURSOR());
*/
- wxMouseEvent event(wxEVENT_TYPE_MOTION);
-
-/*
- float px = (float)x;
- float py = (float)y;
-
- MSWDeviceToLogical(&px, &py);
+ if (!m_mouseInWindow)
+ {
+ // Generate an ENTER event
+ m_mouseInWindow = TRUE;
+ MSWOnMouseEnter(x, y, flags);
+ }
- CalcUnscrolledPosition((int)px, (int)py, &event.m_x, &event.m_y);
-*/
+ wxMouseEvent event(wxEVT_MOTION);
event.m_x = x; event.m_y = y;
event.m_shiftDown = ((flags & MK_SHIFT) != 0);
// Window gets a click down message followed by a mouse move
// message even if position isn't changed! We want to discard
// the trailing move event if x and y are the same.
- if ((m_lastEvent == wxEVENT_TYPE_RIGHT_DOWN || m_lastEvent == wxEVENT_TYPE_LEFT_DOWN ||
- m_lastEvent == wxEVENT_TYPE_MIDDLE_DOWN) &&
+ if ((m_lastEvent == wxEVT_RIGHT_DOWN || m_lastEvent == wxEVT_LEFT_DOWN ||
+ m_lastEvent == wxEVT_MIDDLE_DOWN) &&
(m_lastXPos == event.GetX() && m_lastYPos == event.GetY()))
{
m_lastXPos = event.GetX(); m_lastYPos = event.GetY();
- m_lastEvent = wxEVENT_TYPE_MOTION;
+ m_lastEvent = wxEVT_MOTION;
return;
}
- m_lastEvent = wxEVENT_TYPE_MOTION;
+ m_lastEvent = wxEVT_MOTION;
m_lastXPos = event.GetX(); m_lastYPos = event.GetY();
- GetEventHandler()->OldOnMouseEvent(event);
-}
-long wxControl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
-{
- return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
+ if (!GetEventHandler()->ProcessEvent(event))
+ Default();
}
-bool wxControl::MSWNotify(const WXWPARAM wParam, const WXLPARAM lParam)
+bool wxControl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam,
+ WXLPARAM* result)
{
#if defined(__WIN95__)
- wxCommandEvent event(0, m_windowId);
- int eventType = 0;
+ wxCommandEvent event(wxEVT_NULL, m_windowId);
+ wxEventType eventType = wxEVT_NULL;
NMHDR *hdr1 = (NMHDR*) lParam;
switch ( hdr1->code )
{
break;
}
*/
- default :
- return FALSE;
- break;
+ default:
+ return wxWindow::MSWNotify(wParam, lParam, result);
}
+
event.SetEventType(eventType);
event.SetEventObject(this);
- if ( !ProcessEvent(event) )
+ if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE;
return TRUE;
-#else
- return FALSE;
+#else // !Win95
+ return FALSE;
#endif
}
::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
}
-void wxControl::SetClientSize (const int width, const int height)
+void wxControl::SetClientSize (int width, int height)
{
SetSize (-1, -1, width, height);
}
-void wxControl::Centre (const int direction)
+void wxControl::Centre (int direction)
{
int x, y, width, height, panel_width, panel_height, new_x, new_y;