ďťż

Ładny brzuch

Czy jeśli stworzę np. button za pomocą CreateWindowEX, to czy takie komunikaty
jak naciśnięcie kontrolki będą przesyłane do procedury danej kontrolki, czy
okna-rodzica? W jakiej postaci?



beda przesylane do funkcji przekazanej w WNDCLASSEX przy wywolaniu RegisterClassEx. komunikaty beda w postaci takiej jak zwykle :P [UINT message, WPARAM wParam, LPARAM lParam].

pozdrawiam
pepsi^no1

No ale jeśli tworzę np. button, to korzystam z jego klasy, a tym samym procedury. Jak więc przechwycić moment kliknięcia?

w WM_COMMAND sprawdzasz czy lParam == uchwyt buttona i czy HIWORD(wParam) == BN_CLICKED.

pozdrawiam
pepsi^no1



tak, naciśnięty button wysyła do rodzica WM_COMMAND, podam może dokładniej:

LOWORD(wParam) to identyfikator buttona

CreateWindow(
TEXT("BUTTON"),
NULL,
WS_CHILD | WS_VISIBLE,
0,
0,
200,
100,
hwndParent,
(HMENU) ID_BUTTON //tu właśnie podałeś identyfikator buttona
hInstance,
NULL);

HIWORD(wParam) to jest kod powiadamiania: BN_CLICKED, BN_DBLCLK, BN_KILLLFOCUS, BN_SETFOCUS
i uwaga menu i akceleratory też wysyłają WM_COMMAND, aby je odróżnić sprawdzasz właśnie HIWORD(wParam); jeśli wynosi 1 to znaczy, ze komunikat jest od akceleratora, jeśli zero to znaczy, że od menu, jeśli coś innego to znaczy, że od kontrolki

lParam to uchwyt okna kontrolki
---------------------------------------------
to tyle jeśli chodzi o to co button wysyła poprzez WM_COMMAND
dodatkowo kontrolki w stylu owner draw wysyłają (ale już nie przez cmmand) do okna nadrzędnego informacje związane z ich rysowaniem

może ci to jednak nie wystarczyć, czasem warto mieć większą kontrolę nad tym co robi kontrolka, wtedy nalezy się posłużyć subclassing'iem szczegółów szukaj w msdn

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •