Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

111 lines
2.7 KiB

/****************************** Module Header ******************************\
* Module Name: text.c
*
* Copyright (c) 1985 - 1999, Microsoft Corporation
*
* This module contains the MessageBox API and related functions.
*
* History:
* 10-01-90 EricK Created.
* 11-20-90 DarrinM Merged in User text APIs.
* 02-07-91 DarrinM Removed TextOut, ExtTextOut, and GetTextExtentPoint stubs.
\***************************************************************************/
/***************************************************************************\
* PSMGetTextExtent
*
* NOTE: This routine should only be called with the system font since having
* to realize a new font would cause memory to move...
*
* LATER: Can't this be eliminated altogether? Nothing should be moving
* anymore.
*
* History:
* 11-13-90 JimA Ported.
\***************************************************************************/
#ifdef _USERK_
BOOL xxxPSMGetTextExtent(
HDC hdc,
LPWSTR lpstr,
int cch,
PSIZE psize)
{
int result;
WCHAR szTemp[255], *pchOut;
PTHREADINFO ptiCurrent = PtiCurrentShared();
TL tl;
if (cch > sizeof(szTemp)/sizeof(WCHAR)) {
pchOut = (WCHAR*)UserAllocPool((cch+1) * sizeof(WCHAR), TAG_RTL);
if (pchOut == NULL) {
psize->cx = psize->cy = 0;
return FALSE;
}
ThreadLockPool(ptiCurrent, pchOut, &tl);
} else {
pchOut = szTemp;
}
result = HIWORD(GetPrefixCount(lpstr, cch, pchOut, cch));
if (result) {
lpstr = pchOut;
cch -= result;
}
if (CALL_LPK(ptiCurrent)) {
xxxClientGetTextExtentPointW(hdc, lpstr, cch, psize);
} else {
UserGetTextExtentPointW(hdc, lpstr, cch, psize);
}
if (pchOut != szTemp)
ThreadUnlockAndFreePool(ptiCurrent, &tl);
/*
* IanJa everyone seems to ignore the ret val
*/
return TRUE;
}
#else
BOOL PSMGetTextExtent(
HDC hdc,
LPCWSTR lpstr,
int cch,
PSIZE psize)
{
int result;
WCHAR szTemp[255], *pchOut;
if (cch > sizeof(szTemp)/sizeof(WCHAR)) {
pchOut = (WCHAR*)UserLocalAlloc(0, (cch+1) * sizeof(WCHAR));
if (pchOut == NULL) {
psize->cx = psize->cy = 0;
return FALSE;
}
} else {
pchOut = szTemp;
}
result = HIWORD(GetPrefixCount(lpstr, cch, pchOut, cch));
if (result) {
lpstr = pchOut;
cch -= result;
}
UserGetTextExtentPointW(hdc, lpstr, cch, psize);
if (pchOut != szTemp)
UserLocalFree(pchOut);
/*
* IanJa everyone seems to ignore the ret val
*/
return TRUE;
}
#endif // _USERK_