use empty string and not string().c_str() as title for the controls without it to workaround Windows bug which results in crashes with wxUSE_STL==1 (closes 1222187)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34693 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-06-17 14:32:28 +00:00
parent 48395c0369
commit ad30bb374f

View File

@@ -139,11 +139,25 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
// ... and adjust it to account for a possible parent frames toolbar
AdjustForParentClientOrigin(x, y);
// notice the apparently unnecessary label.empty() test: without it wse get
// crashes when creating controls (notebook to be precise) with empty
// labels as for some reason Windows looks not only at first but also at
// the second byte of the string which is not NUL in the buffer pointed to
// by label.c_str() and if the buffer contains "00 cc cc cc ..." (this is
// what happens in debug build where 0xcc is used as uninitialized memory
// marker) it creates a window not with empty label but with label
// consisting of many Unicode (!) 0xcccc characters
//
// this is not fatal in itself, but becomes so when wxGetWindowText() is
// called because GetWindowTextA() overwrites ASCII buffer with Unicode (!)
// characters without any qualms and so crashes the program...
m_hWnd = (WXHWND)::CreateWindowEx
(
exstyle, // extended style
classname, // the kind of control to create
label, // the window name
label.empty() // the window name
? _T("\0")
: label.c_str(),
style, // the window style
x, y, w, h, // the window position and size
GetHwndOf(GetParent()), // parent