Dans mon interface j'ai quelques boutons, une combo et une fenêtre où j'affiche une séquence d'images. Ces boutons naviguent à travers la séquence, mais je voulais aussi naviguer à travers les flèches GAUCHE et DROITE sur le clavier. Après la compilation, les touches du clavier fonctionnent correctement, car Focus est réglé sur la fenêtre principale, mais après avoir cliqué sur un bouton ou une combinaison, les touches du clavier ne fonctionnent pas. Je le gère avec SetFocus (main_hwnd) dans ma boucle principale mais la zone de liste déroulante ne réagit pas lorsque je clique dessus.BOUTONS, CLAVIER et CLAVIER CLAVIER (winapi)
Exemple ci-dessous:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
CreateWindowEx(0, "COMBOBOX", "", WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST, 478, 5, 50, 200, hwnd, (HMENU)ID_COMBO1, GetModuleHandle(NULL), NULL);
break;
case WM_COMMAND:
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_SPACE:
PostQuitMessage(0);
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
// SetFocus(hwnd);
return 0;
}
assumig cet exemple: après la compilation sur la touche ESPACE fonctionnera, mais après avoir cliqué sur combobox, il ne fonctionnera pas. Si j'utilise SetFocus (hwnd) SPACE KEY fonctionnera toujours mais la liste déroulante sera désactivée.
Merci pour votre aide.
Il y a un certain nombre de problèmes avec ce code: Une subtile est que vous avalez des messages 'WM_KEYDOWN' alors que les contrôles recevront toujours la' WM_KEYUP' correspondant message. Plus important encore, vous ré-inventez mal le gestionnaire de dialogue: La navigation au clavier doit être implémentée en utilisant [IsDialogMessage] (http://msdn.microsoft.com/fr-fr/library/ms645498.aspx) et une gestion correcte du Message "WM_GETDLGCODE". – IInspectable