From: Dimitri Schoolwerth Date: Sun, 15 Feb 2004 21:38:22 +0000 (+0000) Subject: Extended maximum tooltip length (in non-Unicode comctl32 4.70+ mode) from (MSW limite... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/25c46fda57fd39728fc03299a994e79a3242a131?ds=sidebyside Extended maximum tooltip length (in non-Unicode comctl32 4.70+ mode) from (MSW limited) 39 chars to 512 chars (customizable). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25828 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/window.cpp b/src/msw/window.cpp index d47f77d3a1..4e05e2b683 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -3222,32 +3222,26 @@ bool wxWindowMSW::HandleTooltipNotify(WXUINT code, // in Unicode mode this is just what we need ttText->lpszText = (wxChar *)ttip.c_str(); #else // !Unicode -/* - MultiByteToWideChar(CP_ACP, 0, ttip, ttip.length()+1, - (wchar_t *)ttText->szText, - sizeof(ttText->szText) / sizeof(wchar_t)); -*/ - // Fix by dimitrishortcut: see patch 771772 + // Convert tooltip from multi byte to Unicode. - // FIXME: szText has a max of 80 bytes, so limit the tooltip string - // length accordingly. Ideally lpszText should be used, but who - // would be responsible for freeing the buffer? + // We don't want to use the szText buffer because it has a limit of 80 + // bytes, for now use our own static buffer with a higher fixed max + // length. + // Preferably a dynamic buffer should be used, but who frees the buffer? - // Maximum length of a tip is 39 characters. 39 is 80/2 minus 1 byte - // needed for NULL character. - size_t tipLength = wxMin(ttip.Len(), 39); + static const int MAX_LENGTH = 512; + static wchar_t buf[MAX_LENGTH+1]; + + ttText->lpszText = (LPSTR) buf; + + // Truncate tooltip length if needed + size_t tipLength = wxMin(ttip.Len(), MAX_LENGTH); // Convert to WideChar without adding the NULL character. The NULL - // character is added afterwards (Could have used ttip.Left(tipLength) - // and a cchMultiByte parameter of tipLength+1, but this is more - //efficient. - ::MultiByteToWideChar(CP_ACP, 0, ttip, tipLength, - (wchar_t *)ttText->szText, - sizeof(ttText->szText) / sizeof(wchar_t)); - - // Add the NULL character. - ttText->szText[tipLength*2+0] = '\0'; - ttText->szText[tipLength*2+1] = '\0'; + // character is added afterwards (this is more efficient). + ::MultiByteToWideChar(CP_ACP, 0, ttip, tipLength, buf, MAX_LENGTH); + + buf[tipLength] = '\0'; #endif // Unicode/!Unicode }