#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxEvtHandler)
+#endif
BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler)
-EVT_CHAR(wxWindow::OnChar)
-EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground)
-EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
-EVT_INIT_DIALOG(wxWindow::OnInitDialog)
-EVT_IDLE(wxWindow::OnIdle)
+ EVT_CHAR(wxWindow::OnChar)
+ EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground)
+ EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
+ EVT_INIT_DIALOG(wxWindow::OnInitDialog)
+ EVT_IDLE(wxWindow::OnIdle)
END_EVENT_TABLE()
-#endif
-
// Find an item given the MS Windows id
wxWindow *wxWindow::FindItem(int id) const
{
- if (!GetChildren())
- return NULL;
- wxNode *current = GetChildren()->First();
+// if (!GetChildren())
+// return NULL;
+ wxNode *current = GetChildren().First();
while (current)
{
wxWindow *childWin = (wxWindow *)current->Data();
// Find an item given the MS Windows handle
wxWindow *wxWindow::FindItemByHWND(WXHWND hWnd, bool controlOnly) const
{
- if (!GetChildren())
- return NULL;
- wxNode *current = GetChildren()->First();
+// if (!GetChildren())
+// return NULL;
+ wxNode *current = GetChildren().First();
while (current)
{
wxObject *obj = (wxObject *)current->Data() ;
long style,
const wxString& name)
{
- Init();
-
wxCHECK_MSG( parent, FALSE, "can't create wxWindow without parent" );
parent->AddChild(this);
// fontToUse->ReleaseResource();
}
-void wxWindow::Refresh(bool eraseBack, const wxRectangle *rect)
+void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{
HWND hWnd = (HWND) GetHWND();
if (hWnd)
if ( win )
{
- win->MSWNotify(wParam, lParam, &result);
+ if ( win->MSWNotify(wParam, lParam, &result) )
+ return result;
}
else
{
// Rely on MSWNotify to check whether the message
// belongs to the window or not
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while (node)
{
wxWindow *child = (wxWindow *)node->Data();
if ( child->MSWNotify(wParam, lParam, &result) )
- break;
+ return result;
node = node->Next();
}
- }
- return result;
+ // finally try this window too (catches toolbar case)
+ if ( MSWNotify(wParam, lParam, &result) )
+ return result;
+ }
#endif // Win95
+ // not processed
return FALSE;
}
// Responds to colour changes: passes event on to children.
void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event)
{
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
// Only propagate to non-top-level windows
event.SetTimestamp(wxApp::sm_lastMessageTime);
event.m_eventObject = this;
- m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DOWN;
+ m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_LEFT_DOWN;
if (!GetEventHandler()->ProcessEvent(event))
Default();
#if defined(__WIN95__)
// Try to adjust the range to cope with page size > 1
// - a Windows API quirk
- int pageSize = GetScrollPage(orient);
+ int pageSize = GetScrollThumb(orient);
if ( pageSize > 1 )
{
maxPos -= (pageSize - 1);
}
}
-void wxWindow::ScrollWindow(int dx, int dy, const wxRectangle *rect)
+void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
{
RECT rect2;
if ( rect )
// it's an application error (pops up a dialog)
bool wxWindow::TransferDataToWindow()
{
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *child = (wxWindow *)node->Data();
// validation failed: don't quit
bool wxWindow::TransferDataFromWindow()
{
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *child = (wxWindow *)node->Data();
bool wxWindow::Validate()
{
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *child = (wxWindow *)node->Data();
void wxWindow::AddChild(wxWindow *child)
{
- GetChildren()->Append(child);
+ GetChildren().Append(child);
child->m_windowParent = this;
}
void wxWindow::RemoveChild(wxWindow *child)
{
- if (GetChildren())
- GetChildren()->DeleteObject(child);
+// if (GetChildren())
+ GetChildren().DeleteObject(child);
child->m_windowParent = NULL;
}
void wxWindow::DestroyChildren()
{
- if (GetChildren()) {
wxNode *node;
- while ((node = GetChildren()->First()) != (wxNode *)NULL) {
+ while ((node = GetChildren().First()) != (wxNode *)NULL) {
wxWindow *child;
if ((child = (wxWindow *)node->Data()) != (wxWindow *)NULL) {
delete child;
- if ( GetChildren()->Member(child) )
+ if ( GetChildren().Member(child) )
delete node;
}
} /* while */
- }
}
void wxWindow::MakeModal(bool modal)
{
noChanges = 0;
noFailures = 0;
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while (node)
{
wxWindow *child = (wxWindow *)node->Data();
constr->centreX.SetDone(FALSE);
constr->centreY.SetDone(FALSE);
}
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while (node)
{
wxWindow *win = (wxWindow *)node->Data();
if (recurse)
{
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while (node)
{
wxWindow *win = (wxWindow *)node->Data();
wxObject* wxWindow::GetChild(int number) const
{
// Return a pointer to the Nth object in the Panel
- if (!GetChildren())
- return(NULL) ;
- wxNode *node = GetChildren()->First();
+// if (!GetChildren())
+// return(NULL) ;
+ wxNode *node = GetChildren().First();
int n = number;
while (node && n--)
node = node->Next() ;
{
int maxX = 0;
int maxY = 0;
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *win = (wxWindow *)node->Data();
if ( GetId() == id)
return this;
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *child = (wxWindow *)node->Data();
if ( GetName() == name)
return this;
- wxNode *node = GetChildren()->First();
+ wxNode *node = GetChildren().First();
while ( node )
{
wxWindow *child = (wxWindow *)node->Data();
return (m_updateRegion.Contains(rect) != wxOutRegion);
}
+// Set this window to be the child of 'parent'.
+bool wxWindow::Reparent(wxWindow *parent)
+{
+ if (parent == GetParent())
+ return TRUE;
+
+ // Unlink this window from the existing parent.
+ if (GetParent())
+ {
+ GetParent()->RemoveChild(this);
+ }
+ else
+ wxTopLevelWindows.DeleteObject(this);
+
+ HWND hWndParent = 0;
+ HWND hWndChild = (HWND) GetHWND();
+ if (parent != (wxWindow*) NULL)
+ {
+ parent->AddChild(this);
+ hWndParent = (HWND) parent->GetHWND();
+ }
+ else
+ wxTopLevelWindows.Append(this);
+
+ ::SetParent(hWndChild, hWndParent);
+
+ return TRUE;
+}
+
#ifdef __WXDEBUG__
const char *wxGetMessageName(int message)
{