makra HIWORD i LOWORD jak zapisać je do LPARAM?

0

Hej!
Potrzebuje wysłać z kontrolki podrzędnej do nadrzędnej 3 komunikaty.
W słowie WPARAM umieszczam identyfikator kontrolki, a w słowie LPARAM chcę umieścić akcję wykonaną przez kontrolkę oraz pozycję myszy.
Znalazłem makra LOWORD i HIWORD. Wiem jak je odczytać, ale jak zapisać:

#define BUTTON_MOVE 

w LOWORD
oraz adres pamięci:

POINT cur; 

w HIWORD?

Bo nie mam najbladszego pojęcia. Wyczytałem coś o tym, aby przesunąć bity lecz nie wiem jak sie za to zabrać :(

2

Użyj makra MAKELPARAM.

0

Da się przekonwertować wskaźnik na typ WORD?

SendMessage(GetParent(hwnd), WM_COMMAND, (WPARAM)GetWindowLong(hwnd, GWLP_ID), MAKELPARAM(BUTTON_BEFOREMOVE, (WORD)&cur)); 

error: cast from 'POINT* {aka tagPOINT*}' to 'WORD {aka short unsigned int}' loses precision [-fpermissive]|

Rozumiem, że w tym przypadku lepiej ID kontrolki i BUTTON_BEFOREMOVE umieścić w MAKEWPARAM(), a wskaźnik w LPARAM? Da się to zrobić pierwszym sposobem?

1

Da się przekonwertować wskaźnik na typ WORD?

Nie. Wskaźnik ma wielkość 4 lub 8 bajtów, a WORD to 2 bajty.

Rozumiem, że w tym przypadku lepiej ...?

Tak. Zresztą to byłoby zgodne ze opisem WM_COMMAND.

0

@gswidwa Przeczytaj co ma zawierać wParam a co lParam komunikatu WM_COMMAND i nie możesz sobie tego tak dowolnie zmienić ponieważ w lParam ma być uchwyt kontrolki. Makro które powinieneś użyć to MAKEWPARAM ale nie upchasz POINT jako WORD dlatego zapomnij że to zrobisz w ten sposób. Dlaczego uparłeś się aby niestandardowy komunikat (jakiś BUTTON_BEFOREMOVE) wysyłać za pomocą WM_COMMAND? Nie można z tego zrobić komunikatu i obsłużyć osobno?

0

Wysyłam do okna nadrzednego, że jego okno - dziecko zaraz sie przesunie i wysyła swoją "przyszłą" pozycję w celu analizy i ewentualnej edycji. Komunikat before_move jest po to, abym mógł rozróżnić komunikat CLICK, DBCLICK, BEFOREMOVE, MOVE i jeszcze inne...

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