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);
-
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.
-
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.