00048 {
00049
int cx;
00050 LONG textsize, result;
00051
00052
00053
00054
00055
00056
static WCHAR achWorkBuffer[255];
00057 WCHAR *pchOut = achWorkBuffer;
00058 TEXTMETRICW textMetric;
00059 SIZE size;
00060 RECT rc;
00061 COLORREF color;
00062
PTHREADINFO ptiCurrent =
PtiCurrentShared();
00063
00064
if (
CALL_LPK(ptiCurrent)) {
00065
00066
00067
00068
00069 UNICODE_STRING ustrStr;
00070
00071
RtlInitUnicodeString(&ustrStr, lpsz);
00072
xxxClientPSMTextOut(hdc, xLeft, yTop, &ustrStr, cch, dwFlags);
00073
return;
00074 }
00075
00076
if (cch >
sizeof(achWorkBuffer)/
sizeof(WCHAR)) {
00077 pchOut = (WCHAR*)UserAllocPool((cch+1) *
sizeof(WCHAR), TAG_RTL);
00078
if (pchOut ==
NULL)
00079
return;
00080 }
00081
00082 result =
GetPrefixCount(lpsz, cch, pchOut, cch);
00083
00084
if (!(
dwFlags & DT_PREFIXONLY)) {
00085
_TextOutW(hdc, xLeft, yTop, pchOut, cch - HIWORD(result));
00086 }
00087
00088
00089
00090
00091
if (LOWORD(result) == 0xFFFF ||
dwFlags & DT_HIDEPREFIX) {
00092
if (pchOut != achWorkBuffer)
00093 UserFreePool(pchOut);
00094
return;
00095 }
00096
00097
if (!
_GetTextMetricsW(hdc, &textMetric)) {
00098 textMetric.tmOverhang = 0;
00099 textMetric.tmAscent = 0;
00100 }
00101
00102
00103
00104
00105
if (LOWORD(result) != 0) {
00106
00107
00108
00109
00110 GreGetTextExtentW(hdc, (LPWSTR)pchOut, LOWORD(result), &size, GGTE_WIN3_EXTENT);
00111 xLeft += size.cx;
00112
00113
00114
00115
00116
00117 xLeft = xLeft - textMetric.tmOverhang;
00118 }
00119
00120
00121
00122
00123
00124 GreGetTextExtentW(hdc, (LPWSTR)(pchOut + LOWORD(result)), 1, &size, GGTE_WIN3_EXTENT);
00125 textsize = size.cx;
00126
00127
00128
00129
00130
00131
00132 cx = LOWORD(textsize) - textMetric.tmOverhang / 2;
00133
00134
00135
00136
00137 yTop += textMetric.tmAscent + 1;
00138
00139
00140
00141
00142
SetRect(&rc, xLeft, yTop, xLeft+cx, yTop+1);
00143 color = GreSetBkColor(hdc, GreGetTextColor(hdc));
00144 GreExtTextOutW(hdc, xLeft, yTop, ETO_OPAQUE, &rc, TEXT(
""), 0, NULL);
00145 GreSetBkColor(hdc, color);
00146
00147
if (pchOut != achWorkBuffer) {
00148 UserFreePool(pchOut);
00149 }
00150 }