PDAclub.pl - Forum użytkowników technologii mobilnych

Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: Komame w Kwiecień 12, 2006, 23:52:33

Tytuł: WM_KEYDOWN oraz gx_keylist w GAPI
Wiadomość wysłana przez: Komame w 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?
Tytuł: WM_KEYDOWN oraz gx_keylist w GAPI
Wiadomość wysłana przez: warmi w Maj 13, 2006, 08:45:10
WM_KEYDOWN informuje tylko o tym ze klawisz byl nacisniety.
wParam zawiera ktory klawisz byl nacisniety.
Tytuł: WM_KEYDOWN oraz gx_keylist w GAPI
Wiadomość wysłana przez: Komame w 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?
Tytuł: WM_KEYDOWN oraz gx_keylist w GAPI
Wiadomość wysłana przez: fp w 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).