[WinApi] Kursory a IsDialogMessage

0

Witam,
mam problem z którym nie mogę sobie poradzić a mianowicie mam główne okno aplikacji i z niego tworzę potomne. Doszedłem już do polecenia IsDialogMessage które przekazuje komunikat do pętli komunikatu okna potomnego. Jednak w procedurze obsługi tych komunikatów nie rozpoznawane są komunikaty dla klawisza esc, enter i kursorów dla WM_KEYDOWN. Jednakże są widziane w WM_KEYUP. A ja chcę żeby się wykonywała jakaś akcja przy przytrzymanym klawiszu.

W msdn wyczytałem :

When IsDialogMessage processes a message, it checks for keyboard messages and converts them into selections for the corresponding dialog box. For example, the TAB key, when pressed, selects the next control or group of controls, and the DOWN ARROW key, when pressed, selects the next control in a group.

Czyl z tego co zrozumiałem, to komunikat jest modyfikowany.

Pytanie - czy istnieje sposób aby wszystkie komunikaty były interpretowane normalnie w potomnym oknie? Tzn. kiedy mam przyciśnięty kursor w górę, to procedura okna potomnego otrzymuje komunikat WM_KEYDOWN z wParam == VK_UP?

0
freakman69 napisał(a)

Doszedłem już do polecenia IsDialogMessage które przekazuje komunikat do pętli komunikatu okna potomnego.
Nie za bardzo. IsDialogMessage mówi ci czy przekazać komunikat do okna dialogu i przy okazji obsługuje te komunikaty kontrolne, które nie mają być przekazane. Komunikat przekazuje się funkcją DispachMessage. Prawdopodobnie masz coś a'la:

if (!IsDialogMessage(...)) //sprawdź, czy przekazać komunikat
{
   TraslateMessage(...);
   DispachMessage(...); //przekaż komunikat
}

Możesz zrezygnować z klawiszy kontrolnych

//if (!IsDialogMessage(...)) - bez tego
{
   TraslateMessage(...);
   DispachMessage(...); //przekaż komunikat (każdy)
}

lub nie rezygnować z nich, ale przekazywać wszystkie komunikaty:

IsDialogMessage(...); //bez if'a
TraslateMessage(...);
DispachMessage(...); //przekaż komunikat (każdy)
0

Dzięki, wystarczyło to dodać do procedury okna:

case WM_GETDLGCODE:
		return DLGC_WANTMESSAGE;
		break;

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