DWORD dwUnused
);
+typedef BOOL
+(WINAPI* LPKGTEP)(
+ HDC hdc,
+ LPCWSTR lpString,
+ INT cString,
+ INT nMaxExtent,
+ LPINT lpnFit,
+ LPINT lpnDx,
+ LPSIZE lpSize,
+ DWORD dwUnused,
+ int unknown
+);
+
extern HINSTANCE hLpk;
extern LPKETO LpkExtTextOut;
extern LPKGCP LpkGetCharacterPlacement;
+extern LPKGTEP LpkGetTextExtentExPoint;
/* DEFINES *******************************************************************/
#define LPK_INIT 1
#define LPK_ETO 2
#define LPK_GCP 3
+#define LPK_GTEP 4
/* MACRO ********************************************************************/
DPRINT("nMaxExtent is invalid: %d\n", nMaxExtent);
}
+ if (LoadLPK(LPK_GTEP))
+ return LpkGetTextExtentExPoint(hdc, lpszString, cchString, nMaxExtent, lpnFit, lpnDx, lpSize, 0, 0);
+
return NtGdiGetTextExtentExW (
hdc, (LPWSTR)lpszString, cchString, nMaxExtent, (PULONG)lpnFit, (PULONG)lpnDx, lpSize, 0 );
}
WINAPI
GetTextExtentExPointWPri(
_In_ HDC hdc,
- _In_reads_(cwc) LPWSTR lpwsz,
- _In_ ULONG cwc,
- _In_ ULONG dxMax,
- _Out_opt_ ULONG *pcCh,
- _Out_writes_to_opt_(cwc, *pcCh) PULONG pdxOut,
+ _In_reads_(cwc) LPCWSTR lpwsz,
+ _In_ INT cwc,
+ _In_ INT dxMax,
+ _Out_opt_ LPINT pcCh,
+ _Out_writes_to_opt_(cwc, *pcCh) LPINT pdxOut,
_In_ LPSIZE psize)
{
- return NtGdiGetTextExtentExW(hdc, lpwsz, cwc, dxMax, pcCh, pdxOut, psize, 0);
+ return NtGdiGetTextExtentExW(hdc, (LPWSTR)lpwsz, cwc, dxMax, (PULONG)pcCh, (PULONG)pdxOut, psize, 0);
}
/*
HINSTANCE hLpk = NULL;
LPKETO LpkExtTextOut = NULL;
LPKGCP LpkGetCharacterPlacement = NULL;
+LPKGTEP LpkGetTextExtentExPoint = NULL;
/**
* @name CalculateColorTableSize
* LPK.DLL loader function
*
* Returns TRUE if a valid parameter was passed and loading was successful,
-* retruns FALSE otherwise.
+* returns FALSE otherwise.
*/
BOOL WINAPI LoadLPK(INT LpkFunctionID)
{
return TRUE;
+ case LPK_GTEP:
+ if (!LpkGetTextExtentExPoint) // Check if the function is already loaded
+ LpkGetTextExtentExPoint = (LPKGTEP) GetProcAddress(hLpk, "LpkGetTextExtentExPoint");
+
+ if (!LpkGetTextExtentExPoint)
+ {
+ FreeLibrary(hLpk);
+ return FALSE;
+ }
+
+ return TRUE;
+
default:
FreeLibrary(hLpk);
return FALSE;