Ta méthode je l'utilise déjà. Je fais un GetMessage(...,NULL,...) ce qui fait que tous les messages sont reçus. Mais le problème est que je ne peux pas les filtrer sous WM_COMMAND ... ils n'apparaissent pas.
J'ai tout de même trouvé une solution ! (un peu compliquée).
Voici les étapes :
1) GetClassInfoEx : extraire les infos d'une classe // MyButton WNDCLASSEX buttcls; buttcls.cbSize = sizeof buttcls; ::GetClassInfoEx(NULL, _T("Button"), &buttcls);
2) Garder quelque part la fonction de traitement par défaut : defaultButtonProc = buttcls.lpfnWndProc;
3) Modifier la fonction qui traitera les msgs : buttcls.lpfnWndProc = MyButtonProc;
4) Enregister la nouvelle classe buttcls.lpszClassName = _T("MyButton"); ::RegisterClassEx(&buttcls)
5) Créer un nouveau bouton HWND mainBut = ::CreateWindowEx(0,"MyButton","Click", WS_CHILD | BS_PUSHBUTTON,x,y,w,h, mainWnd,NULL,NULL,NULL); ::ShowWindow(mainBut,SW_SHOW);
6) Créer un sous bouton HWND subBut = ::CreateWindowEx(0,"MyButton","Click", WS_CHILD | BS_PUSHBUTTON,x,y,w,h, mainBut,NULL,NULL,NULL); ::ShowWindow(subBut,SW_SHOW);
Et voilà ... puis dans la procedure de traitement des Msg :
LRESULT CALLBACK MyButtProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if(message == WM_COMMAND) { .... } return ::CallWindowProc(defaultButtonProc, hWnd, message, wParam, lParam); }
Note : ne pas oublier ::CallWindowProc(default...) sinon le bouton ne sera pas créé !
Voilà, si il y a une méthode plus simple ... je suis preneur !
Merci
Sven
|