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
-
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 informuje tylko o tym ze klawisz byl nacisniety.
wParam zawiera ktory klawisz byl nacisniety.
-
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?
-
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).