Evènement clavier sous VC++

curator68 Messages postés 27 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 2 septembre 2004 - 4 avril 2003 à 14:33
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 4 avril 2003 à 15:10
>:) Curator68 >:)

J'ai besoin d'aide en ce qui concerne les évènements clavier WM_KEYUP, WM_KEYDOWN et WM_CHAR.
j'arrive pas à intercepter ces évènements dans une boîte de dialogue modale.

merci d'avance.

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 avril 2003 à 14:41
Une dialogbox a un comportement particulier. Pour intercepter events clavier, soit tu sous classes les controles de dialogbox, soit tu installes un SetWindowsHookEx() dans WM_INITDIALOG et bien l'enlever quand boite se detruit.
BruNews, ciao...
0
curator68 Messages postés 27 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 2 septembre 2004
4 avril 2003 à 14:48
>:) Curator68 >:)
Ce serai possible possible d'avoir des précisions sur l'utilisation de SetWindowsHookEx()??? Je suis en cours entrain de bosser pour mon projet d'examen, et ça fait 3 jours que je cherche pour ces satanés évènements clavier.

thx
0
curator68 Messages postés 27 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 2 septembre 2004
4 avril 2003 à 14:52
>:) Curator68 >:)
Ce serai possible d'avoir des précisions sur SetWindowsHookEx().
thx
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 avril 2003 à 14:59
SetWindowsHookEx(), tu passes WH_KEYBOARD. Il faut lire msdn, trop vaste sujet pour explication forum. Tu dois fournir une proc de callback.
BruNews, ciao...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 avril 2003 à 15:10
Je te mets un exemple intercepte messages souris pour tooltips sur dialogbox, tu adapteras.
Et en sortie: UnhookWindowsHookEx(g_hhk);

LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG *lpmsg;
lpmsg = (MSG *) lParam;
if(nCode < 0 || !(IsChild(g_hwndDlg, lpmsg->hwnd)))
return (CallNextHookEx(g_hhk, nCode, wParam, lParam));
switch (lpmsg->message) {
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
if(g_hwndTT != NULL) {
MSG msg; msg.lParam lpmsg->lParam; msg.wParam lpmsg->wParam; msg.message lpmsg->message; msg.hwnd lpmsg->hwnd;
SendMessage(g_hwndTT, TTM_RELAYEVENT, 0, (LPARAM) (LPMSG) &msg);
}
break;
default: break;
}
return (CallNextHookEx(g_hhk, nCode, wParam, lParam));
}

BOOL CALLBACK EnumChildProc(HWND hwndCtrl, LPARAM lParam)
{
TOOLINFO ti;
char szClass[64];
GetClassName(hwndCtrl, szClass, sizeof(szClass));
if(lstrcmpi(szClass, "STATIC")) { // Skip static controls.
ti.cbSize = sizeof(TOOLINFO); ti.uFlags TTF_IDISHWND; ti.hwnd g_hwndDlg; ti.uId (UINT) hwndCtrl; ti.hinst 0;
ti.lpszText = LPSTR_TEXTCALLBACK;
SendMessage(g_hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
}
return TRUE;
}

ICI est appele par WM_INITDIALOG
BOOL DoCreateDialogTooltip()
{
g_hwndTT = CreateWindowEx(0, TOOLTIPS_CLASS, (LPSTR) NULL,
TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, g_hwndDlg, (HMENU) NULL, m_hinst, NULL);
if(g_hwndTT == NULL) return FALSE;
if(!EnumChildWindows(g_hwndDlg, (WNDENUMPROC) EnumChildProc, 0)) return FALSE;
g_hhk = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, (HINSTANCE) NULL, GetCurrentThreadId());
if(g_hhk == (HHOOK) NULL) return FALSE;
return TRUE;
}

BruNews, ciao...
0
Rejoignez-nous