C++ WinAPI pytanie teoretyczne.

0

Witam,
mam parę pytań odnośnie programowania w C++ z użyciem WinAPI:

  1. Mam okno1, zarejestrowane i z uchwytem do procesu programu, w tym oknie przyciskiem otwieram następne okno2 i czy te okno2 na nowo muszę rejestrować czy mogę tylko użyć CreateWindow?
  2. Czy okno2 i w przyszłości następne okna mogą się opierać na tym samym uchwycie procesu programu?
  3. Jaka jest praktyczna różnica między wParam i lParam?

Pytam, gdyż działa mi tak i tak i mógłbym to zostawić, ale interesuje mnie jak to będzie profesjonalnie, więc bardzo proszę o odpowiedź na moje pytania.

0

Rejestrując klasę okna dajesz znać systemowi, że taka a taka klasa okna będzie obsługiwać komunikaty w takiej a takiej funkcji. Jeżeli otworzysz wiele okien tej samej klasy, to wszystkie te okna będą obsługiwane przez jedną funkcję, innymi słowy będą się tak samo zachowywać, będą to samo wyświetlać itd.

Jeżeli wiele okien ma działać inaczej (np każde inaczej) to możesz albo zarejestrować wiele klas i otworzyć wiele okien o różnych klasach, albo używając zawsze jednej klasy możesz też dynamicznie zmienić adres funkcji obsługującej komunikaty, funkcją

SetWindowLong(hwnd, GWL_WNDPROC, (LONG)funkcja);
  1. Jeżeli masz na myśli HINSTANCE to tak, ten argument był ważny w Windows 95/98/Me, a w XP możesz tam śmiało wstawić zero, ponieważ wg. dokumentacji jest on ignorowany.

  2. lParam bardzo często jest wskaźnikiem na dodatkowe dane, jeżeli wysyłasz komunikat WM_SETTEXT, EM_REPLACESEL, WM_NOTIFY, WM_COPYDATA lub jakikolwiek podobny, to właśnie do lParam wstawiasz adres bufora z tekstem (lub na tekst), albo adres jakiejś struktury danych. Oba - lParam i wParam mieszczą tylko 32 bity, więc wybór na wskaźnik padł na lParam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1