// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Copyright: (c) Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// headers
// ---------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation
#endif
#include "wx/wx.h"
#endif
-#if defined(__WIN95__) && !defined(__TWIN32__)
+#if defined(__WIN95__)
#include "wx/spinbutt.h"
#endif
#include "wx/msw/private.h"
// global functions
// ---------------------------------------------------------------------------
-extern wxWindow *wxWndHook;
extern LONG APIENTRY _EXPORT wxDlgProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
bool wxWindow::LoadNativeDialog(wxWindow* parent, wxWindowID& id)
{
m_windowId = id;
- wxWndHook = this;
+
+ wxWindowCreationHook hook(this);
m_hWnd = (WXHWND)::CreateDialog((HINSTANCE)wxGetInstance(),
MAKEINTRESOURCE(id),
parent ? (HWND)parent->GetHWND() : 0,
(DLGPROC) wxDlgProc);
- wxWndHook = NULL;
if ( !m_hWnd )
return FALSE;
HWND hWndNext;
hWndNext = ::GetWindow((HWND) m_hWnd, GW_CHILD);
- wxWindow* child = NULL;
if (hWndNext)
- child = CreateWindowFromHWND(this, (WXHWND) hWndNext);
+ CreateWindowFromHWND(this, (WXHWND) hWndNext);
while (hWndNext != (HWND) NULL)
{
hWndNext = ::GetWindow(hWndNext, GW_HWNDNEXT);
if (hWndNext)
- child = CreateWindowFromHWND(this, (WXHWND) hWndNext);
+ CreateWindowFromHWND(this, (WXHWND) hWndNext);
}
return TRUE;
{
SetName(name);
- wxWndHook = this;
+ wxWindowCreationHook hook(this);
m_hWnd = (WXHWND)::CreateDialog((HINSTANCE) wxGetInstance(),
name.c_str(),
parent ? (HWND)parent->GetHWND() : 0,
(DLGPROC)wxDlgProc);
- wxWndHook = NULL;
if ( !m_hWnd )
return FALSE;
else
wxTopLevelWindows.Append(this);
- // FIXME why don't we enum all children here?
+ // Enumerate all children
+ HWND hWndNext;
+ hWndNext = ::GetWindow((HWND) m_hWnd, GW_CHILD);
+
+ if (hWndNext)
+ CreateWindowFromHWND(this, (WXHWND) hWndNext);
+
+ while (hWndNext != (HWND) NULL)
+ {
+ hWndNext = ::GetWindow(hWndNext, GW_HWNDNEXT);
+ if (hWndNext)
+ CreateWindowFromHWND(this, (WXHWND) hWndNext);
+ }
return TRUE;
}
if ( m_windowId == id )
return this;
- wxWindowList::Node *node = GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
while ( node )
{
wxWindow* child = node->GetData();
if (str == wxT("BUTTON"))
{
int style1 = (style & 0xFF);
+#if wxUSE_CHECKBOX
if ((style1 == BS_3STATE) || (style1 == BS_AUTO3STATE) || (style1 == BS_AUTOCHECKBOX) ||
(style1 == BS_CHECKBOX))
{
win = new wxCheckBox;
}
- else if ((style1 == BS_AUTORADIOBUTTON) || (style1 == BS_RADIOBUTTON))
+ else
+#endif
+#if wxUSE_RADIOBTN
+ if ((style1 == BS_AUTORADIOBUTTON) || (style1 == BS_RADIOBUTTON))
{
win = new wxRadioButton;
}
+ else
+#endif
+#if wxUSE_BMPBUTTON
#if defined(__WIN32__) && defined(BS_BITMAP)
- else if (style & BS_BITMAP)
+ if (style & BS_BITMAP)
{
// TODO: how to find the bitmap?
win = new wxBitmapButton;
wxLogError(wxT("Have not yet implemented bitmap button as BS_BITMAP button."));
}
+ else
#endif
- else if (style1 == BS_OWNERDRAW)
+ if (style1 == BS_OWNERDRAW)
{
// TODO: how to find the bitmap?
// TODO: can't distinguish between bitmap button and bitmap static.
// with a switch in the drawing code. Call default proc if BS_BITMAP.
win = new wxBitmapButton;
}
- else if ((style1 == BS_PUSHBUTTON) || (style1 == BS_DEFPUSHBUTTON))
+ else
+#endif
+#if wxUSE_BUTTON
+ if ((style1 == BS_PUSHBUTTON) || (style1 == BS_DEFPUSHBUTTON))
{
win = new wxButton;
}
- else if (style1 == BS_GROUPBOX)
+ else
+#endif
+#if wxUSE_STATBOX
+ if (style1 == BS_GROUPBOX)
{
win = new wxStaticBox;
}
else
+#endif
{
- wxLogError(wxT("Don't know what kind of button this is: id = %d"),
+ wxLogError(wxT("Don't know what kind of button this is: id = %ld"),
id);
}
}
+#if wxUSE_COMBOBOX
else if (str == wxT("COMBOBOX"))
{
win = new wxComboBox;
}
+#endif
+#if wxUSE_TEXTCTRL
// TODO: Problem if the user creates a multiline - but not rich text - text control,
// since wxWin assumes RichEdit control for this. Should have m_isRichText in
// wxTextCtrl. Also, convert as much of the window style as is necessary
{
win = new wxTextCtrl;
}
+#endif
+#if wxUSE_LISTBOX
else if (str == wxT("LISTBOX"))
{
win = new wxListBox;
}
+#endif
+#if wxUSE_SCROLLBAR
else if (str == wxT("SCROLLBAR"))
{
win = new wxScrollBar;
}
-#if defined(__WIN95__) && !defined(__TWIN32__) && wxUSE_SPINBTN
+#endif
+#if defined(__WIN95__) && wxUSE_SPINBTN
else if (str == wxT("MSCTLS_UPDOWN32"))
{
win = new wxSpinButton;
}
#endif
+#if wxUSE_SLIDER
else if (str == wxT("MSCTLS_TRACKBAR32"))
{
// Need to ascertain if it's horiz or vert
win = new wxSlider;
}
+#endif // wxUSE_SLIDER
+#if wxUSE_STATTEXT
else if (str == wxT("STATIC"))
{
int style1 = (style & 0xFF);
- if ((style1 == SS_LEFT) || (style1 == SS_RIGHT) || (style1 == SS_SIMPLE))
+ if ((style1 == SS_LEFT) || (style1 == SS_RIGHT)
+#ifndef __WXWINCE__
+ || (style1 == SS_SIMPLE)
+#endif
+ )
win = new wxStaticText;
+#if wxUSE_STATBMP
#if defined(__WIN32__) && defined(BS_BITMAP)
else if (style1 == SS_BITMAP)
{
wxLogError(wxT("Please make SS_BITMAP statics into owner-draw buttons."));
}
#endif
+#endif /* wxUSE_STATBMP */
}
+#endif
else
{
wxString msg(wxT("Don't know how to convert from Windows class "));
win->SubclassWin(hWnd);
win->AdoptAttributesFromHWND();
win->SetupColours();
-
- return win;
}
- else
- return NULL;
+
+ return win;
}
// Make sure the window style (etc.) reflects the HWND style (roughly)