+ WXDWORD exstyle;
+ WXDWORD msStyle = MSWGetStyle(GetWindowStyle(), &exstyle);
+
+ return MSWCreateControl(classname, msStyle, pos, size, label, exstyle);
+}
+
+bool wxControl::MSWCreateControl(const wxChar *classname,
+ WXDWORD style,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxString& label,
+ WXDWORD exstyle)
+{
+ // if no extended style given, determine it ourselves
+ if ( exstyle == (WXDWORD)-1 )
+ {
+ exstyle = 0;
+ (void) MSWGetStyle(GetWindowStyle(), &exstyle);
+ }
+
+ // all controls should have this style
+ style |= WS_CHILD;
+
+ // create the control visible if it's currently shown for wxWidgets
+ if ( m_isShown )
+ {
+ style |= WS_VISIBLE;
+ }
+
+ // choose the position for the control: we have a problem with default size
+ // here as we can't calculate the best size before the control exists
+ // (DoGetBestSize() may need to use m_hWnd), so just choose the minimal
+ // possible but non 0 size because 0 window width/height result in problems
+ // elsewhere
+ int x = pos.x == wxDefaultCoord ? 0 : pos.x,
+ y = pos.y == wxDefaultCoord ? 0 : pos.y,
+ w = size.x == wxDefaultCoord ? 1 : size.x,
+ h = size.y == wxDefaultCoord ? 1 : size.y;
+
+ // ... and adjust it to account for a possible parent frames toolbar
+ AdjustForParentClientOrigin(x, y);
+
+ m_hWnd = (WXHWND)::CreateWindowEx
+ (
+ exstyle, // extended style
+ classname, // the kind of control to create
+ label.wx_str(), // the window name
+ style, // the window style
+ x, y, w, h, // the window position and size
+ GetHwndOf(GetParent()), // parent
+ (HMENU)wxUIntToPtr(GetId()), // child id
+ wxGetInstance(), // app instance
+ NULL // creation parameters
+ );
+
+ if ( !m_hWnd )
+ {
+ wxLogLastError(wxString::Format
+ (
+ _T("CreateWindowEx(\"%s\", flags=%08lx, ex=%08lx)"),
+ classname, style, exstyle
+ ));