Нижеследующий типовой код демонстрирует, как заменить функцию LoadCursor в Microsoft Layer for Unicode.
// переадресуем объявление замены
HCURSOR __stdcall UserLoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName);
// заменим
extern FARPROC Unicows_LoadCursorW = (FARPROC)&UserLoadCursorW;
HCURSOR __stdcall
UserLoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName)
{
// Преобразуем только реальные символьные строки, а не
// пользовательские атомы или пустые указатели (NULLs)
if ((ULONG_PTR)(lpCursorName) > 0xffff)
{
// Получим размер строки Unicode
size_t cchCursorName = wcslen(lpCursorName);
// Назначим достаточное место для строки Ansi
LPSTR lpCursorNameA = _alloca((cchCursorName + 1) * 2);
// Преобразуем строку из Unicode
WideCharToMultiByte(CP_ACP,
0,
lpCursorName,
cchCursor,
lpCursorNameA,
cchCursor * 2,
NULL,
NULL);
return(LoadCursorA(hInstance, lpCursorNameA);
}
else
{
// Это - не действительная строка, чтобы хорошо вызываться
// напрямую без преобразования этого параметра.
return(LoadCursorA(hInstance, (LPSTR)lpCursorName);
}
}
|