16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

while(GetMessage(&msg,NULL,0,0)) //Poki nie otrzymamy WM_QUIT<br />

{<br />

....<br />

}<br />

Po naciśnięciu przez użytkownika klawisza generowany jest<br />

komunikat WM_KEYDOWN. Jednakże z faktu otrzymania komunikatu<br />

WM_KEYDOWN nie wynika, który klawisz został przyciśnięty, czy<br />

była to duża, czy mała litera. Funkcję TranslateMessage()<br />

(PrzetłumaczKomunikat) stosuje się do przetłumaczenia komunikatu<br />

WM_KEYDOWN na komunikat WM_CHAR. Komunikat WM_CHAR przekazuje<br />

przy pomocy parametru wParam kod ASCII naciśniętego klawisza.<br />

Funkcję TranslateMessage() stosujemy w pętli pobierania<br />

komunikatów tak:<br />

int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, \<br />

LPSTR lpszCmdLine, int nCmdShow)<br />

....<br />

while(GetMessage(&msg, 0, 0, 0))<br />

{<br />

TranslateMessage(&msg);<br />

....<br />

}<br />

W tym stadium program jest gotów do przesłania komunikatu do<br />

funkcji - procedury okienkowej WindowProc(). Posłużymy się w tym<br />

celu funkcją DispatchMessage() (ang. dispatch - odpraw, przekaż,<br />

DispatchMessage = OtprawKomunikat). Funkcja WinMain()<br />

poinformowała wcześniej Windows, że odprawiane komunikaty<br />

powinny trafić właśnie do WindowProc().<br />

while(GetMessage(&msg, NULL, NULL, NULL))<br />

{<br />

TranslateMessage(&msg);<br />

DispatchMessage(&msg);<br />

}<br />

Tak funkcjonuje pętla pobierająca komunikaty od Windows i<br />

przekazująca je funkcji WindowProc(). Pętla działa do momentu<br />

pobrania komunikatu WM_QUIT (Koniec!). Otrzymanie komunikatu<br />

WM_QUIT powoduje przerwanie pętli i zakończenie pracy programu.<br />

Komunikaty systemowe (system messages), które są kierowane do<br />

Windows także trafiają do tej pętli i są przekazywane do<br />

WindowProc(), ale ich obsługą powinna się zająć specjalna<br />

funkcja DefWindowProc() - Default Window Procedure, umieszczona<br />

na końcu (wariant default).<br />

Jest to standardowa dla aplikacji okienkowych postać pętli<br />

pobierania komunikatów.<br />

Jak widać, wymiana informacji pomiędzy użytkownikiem,<br />

środowiskiem a aplikacją przebiega tu trochę inaczej niż w DOS.<br />

Program pracujący w środowisku tekstowym DOS nie musi np.<br />

- 382-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!