WM_KEYDOWN oraz gx_keylist w GAPI

  • 3 Odpowiedzi
  • 1123 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Komame

  • 35
  • Płeć: Mężczyzna
  • Sprzęt: SE X1
WM_KEYDOWN oraz gx_keylist w GAPI
« dnia: Kwiecień 12, 2006, 23:52:33 »
Nie do końca rozumiem, o co chodzi w GAPI w przypadku obsługi klawiszy sprzętowych.

W MSND oraz w wielu innych źródłach można znaleźć taki przykład:

case WM_KEYDOWN:
if (wParam == (unsigned) gx_keylist.vkUp)
{
...
}
break;


Jednak zarówno w powyższym przypadku jak i w przypadku zastosowania standardowego rozwiązania, czyli:

case WM_KEYDOWN:
if wParam == VK_KEYDOWN
{
...
}
break;


...efekt jest ten sam. Zawsze działa :)

Na czym więc polega różnica? Co zyskujemy w programe przez wykorzystanie tego porównania z użyciem gx_keylist?
Tzn. wiem, że w pierwszym przypadku należy użyć poleceń GXOpenInput() oraz GXCloseInput(), które m.in. blokują domyślnie przypisane zadania (programy) przypisane hardware'owym przyciskom (np. w moim SPV M3000 przycisk domyślnie odpalający program obsługi wiadomości działa tylko w aplikacjach, gdzie wykorzystuję GDI).
Ale jesli chodzi o obsługę WM_KEYDOWN, jak w przykładach powyżej - czy jest jeszcze jakaś różnica?

WM_KEYDOWN oraz gx_keylist w GAPI
« Odpowiedź #1 dnia: Maj 13, 2006, 08:45:10 »
WM_KEYDOWN informuje tylko o tym ze klawisz byl nacisniety.
wParam zawiera ktory klawisz byl nacisniety.

*

Offline Komame

  • 35
  • Płeć: Mężczyzna
  • Sprzęt: SE X1
WM_KEYDOWN oraz gx_keylist w GAPI
« Odpowiedź #2 dnia: Maj 13, 2006, 10:38:38 »
Jasne, ale chodzi mi o to czym się różni wykorzystanie tego porównania:

if (wParam == (unsigned) gx_keylist.vkUp)
{
}


od tego:

if (wParam == VK_KEYDOWN)
{
}


przecież efekt jest identyczny, po co więc istnieje struktura gx_keylist? Czy zamiast pisać w porównaniach (unsigned) gx_keylist.vkUp - tak jak jest to w pierwszym przypadku, można po prostu napisać VK_KEYDOWN?

Stwierdziłbym nawet, że porównanie z wykorzystaniem gx_keylist jest wolniejsze, bo jest to struktura i trzeba przeliczyć dodatkowo offset do .vkUp, więc dlaczego w wielu programach z wykorzystaniem GAPI właśnie w ten sposób się to robi zamiast po prostu użyć VK_KEYDOWN?

*

Offline fp

  • **
  • 113
    • http://pdaclub.pl/forum/index.php?action=search
WM_KEYDOWN oraz gx_keylist w GAPI
« Odpowiedź #3 dnia: Maj 13, 2006, 20:04:37 »
Cytat: "Komame"

Stwierdziłbym nawet, że porównanie z wykorzystaniem gx_keylist jest wolniejsze, bo jest to struktura i trzeba przeliczyć dodatkowo offset do .vkUp, więc dlaczego w wielu programach z wykorzystaniem GAPI właśnie w ten sposób się to robi zamiast po prostu użyć VK_KEYDOWN?


człowieku, przeliczanie offsetu to po prostu dodanie stałej do rejestru. prędkość nie ma znaczenia chyba, że sprawdzasz klawisz 50 tys razy na sekundę ;-))

moim zdaniem sprawdzanie stałej wg tablicy gz_keylist może mieć znaczenie w przypadku, gdy w systemie są jakoś przedefiniowane klawisze. albo jest to po prostu furtka na przyszłość... (która pewnie i tak będzie niewykorzystana, bo GAPI jest teraz oficjalnie deprecated).