From ad30bb374f539a1f9a98bd9aeee88037c90bb454 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 17 Jun 2005 14:32:28 +0000 Subject: [PATCH] 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 --- src/msw/control.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/msw/control.cpp b/src/msw/control.cpp index 8b27babb06..a020137ad7 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -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 -- 2.47.2