- if (s != wxT(""))
- {
- int existingExtent = (int)SendMessage(GetHwnd(), LB_GETHORIZONTALEXTENT, 0, 0L);
- HDC dc = GetWindowDC(GetHwnd());
- HFONT oldFont = 0;
- if (GetFont().Ok() && GetFont().GetResourceHandle())
- oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
-
- GetTextMetrics(dc, &lpTextMetric);
- SIZE extentXY;
- ::GetTextExtentPoint(dc, (LPTSTR) (const wxChar *)s, s.Length(), &extentXY);
- int extentX = (int)(extentXY.cx + lpTextMetric.tmAveCharWidth);
-
- if (oldFont)
- ::SelectObject(dc, oldFont);
-
- ReleaseDC(GetHwnd(), dc);
- if (extentX > existingExtent)
- SendMessage(GetHwnd(), LB_SETHORIZONTALEXTENT, LOWORD(extentX), 0L);
- return;
- }
- else
- {
- int largestExtent = 0;
- HDC dc = GetWindowDC(GetHwnd());
- HFONT oldFont = 0;
- if (GetFont().Ok() && GetFont().GetResourceHandle())
- oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont().GetResourceHandle());
-
- GetTextMetrics(dc, &lpTextMetric);
- int i;
- for (i = 0; i < m_noItems; i++)
- {
- int len = (int)SendMessage(GetHwnd(), LB_GETTEXT, i, (LONG)wxBuffer);
- wxBuffer[len] = 0;
- SIZE extentXY;
- ::GetTextExtentPoint(dc, (LPTSTR)wxBuffer, len, &extentXY);
- int extentX = (int)(extentXY.cx + lpTextMetric.tmAveCharWidth);
- if (extentX > largestExtent)
- largestExtent = extentX;
- }
- if (oldFont)
- ::SelectObject(dc, oldFont);
+ lLen = LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)N, (MPARAM)0));
+ zBuf = new wxChar[lLen + 1];
+ ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT((SHORT)N, (SHORT)lLen), (MPARAM)zBuf);
+ zBuf[lLen] = '\0';
+ sResult = zBuf;
+ delete [] zBuf;
+ return sResult;
+} // end of wxListBox::GetString