+
+// Each element of the array will be the width of the string up to and
+// including the coresoponding character in text.
+
+bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
+{
+ static int maxLenText = -1;
+ static int maxWidth = -1;
+ int fit = 0;
+ SIZE sz = {0,0};
+ int stlen = text.Length();
+
+ if (maxLenText == -1)
+ {
+ // Win9x and WinNT+ have different limits
+ int version = wxGetOsVersion();
+ maxLenText = version == wxWINDOWS_NT ? 65535 : 8192;
+ maxWidth = version == wxWINDOWS_NT ? INT_MAX : 32767;
+ }
+
+ widths.Empty();
+ widths.Add(0, stlen); // fill the array with zeros
+
+ if (!::GetTextExtentExPoint(GetHdc(),
+ text.c_str(), // string to check
+ wxMin(stlen, maxLenText),
+ maxWidth,
+ &fit, // [out] count of chars
+ // that will fit
+ &widths[0], // array to fill
+ &sz))
+ {
+ // API failed
+ wxLogLastError(wxT("GetTextExtentExPoint"));
+ return false;
+ }
+
+ return true;
+}
+
+
+
+