Witam.
Jak to jest z UNICODE w XP?
Kiedyś wyczytałem gdzieś na necie wyczytałem, że jak wywołam np.
MessageBoxA to XP najpierw wykona MessageBoxA, potem MessageBoxW - to
prawda?
Było tam też napisane, że bardziej się opłaca wykonywać funkcję tylko
w wersji UNICODE bo wtedy program działa szybciej, gdyż windows nie
wywołuje dodatkowo tej samej funkcji w wersji ANSI.
Czy to też jest prawdą?
Postanowiłem w swoim programie każdą funkcję zamienić na wersję "W",
jeśli taka istnieje - czy to dobre podejście? Mam na myśli również
taką procedurę obsługi komunikatów okien (wbrew pozorom - to nie jest
VCL, lecz moja klasa podobna do VCL):
function TMainWnd.WndProc(uMsg: UINT; wPar: WPARAM; lPar: LPARAM):
LRESULT; stdcall;
var
H: HWND;
Ret: Integer;
MainWndPS: TPaintStruct;
begin
Result := 0;
H := Integer(Self);
Ret := GetWindowLongW(H, GWL_USERDATA); //UNICODE
if (Ret <> 0) then Self := TMainWnd(Ret)
else Self := TMainWnd(PCreateStructW(lPar)^.lpCreateParams); //UNICODE
case uMsg of
WM_CREATE:
begin
SetWindowLongW(H, GWL_USERDATA, Integer(PCreateStructW(lPar)^.lpCreateParams)); //UNICODE
end;
WM_PAINT:
begin
//Jakieś tam rysowanie
FDC := BeginPaint(H, MainWndPS);
TmpPen := CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
DeleteObject(SelectObject(MainWndPS.hdc, TmpPen));
MoveToEx(MainWndPS.hdc, 0, 0, nil);
LineTo(MainWndPS.hdc, FWidth - 1, 0);
LineTo(MainWndPS.hdc, FWidth - 1, FHeight - 1);
LineTo(MainWndPS.hdc, 0, FHeight - 1);
LineTo(MainWndPS.hdc, 0, 0);
EndPaint(H, MainWndPS);
end;
WM_DESTROY:
begin
PostQuitMessage(0);
end;
else Result := DefWindowProcW(H, uMsg, wPar, lPar); //UNICODE
end;
end;