Bonjour,
voilà une partie du code générer quand on crée un nouveau projet mfc (B dialog)
BEGIN_MESSAGE_MAP(CtestApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
J'aimerai bien si vous pouvez mz commenter lces tois lignes.
Merci
Bonjour,
voilà une partie du code générer quand on crée un nouveau projet mfc (B dialog)
BEGIN_MESSAGE_MAP(CtestApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
J'aimerai bien si vous pouvez mz commenter lces tois lignes.
Merci
La Message Map est une liste de structures contenant notamment ID de message & pointeur de fonction membre vers la fonction membre qui traitera le message.
(Chaque structrure contient aussi d'autres infos, comme notamment ici un ID de commande).
ON_COMMAND() définit une telle structure pour déclarer que si la fenêtre reçoit un message WM_COMMAND avec l'ID de commande ID_HELP, la fonction membre OnHelp() sera appelée.
BEGIN_MESSAGE_MAP() déclare le début de la liste en question, et END_MESSAGE_MAP() est typiquement juste une accolade fermante (et peut-être d'autres trucs après).
On n'a pas à se soucier de ce que ces macros contiennent vraiment, même si c'est instructif au sujet des entrailles des MFC.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
en fait ce n'est pas trop laire pour moi ! dsl mais mes connaissances sont trop limités en ça!
sinon j'aimerai bien tu peux me donner un exemple de ce que tu m'as dis : quand la fenêtre reçoit un message WM_COMMAND avec l'ID de commande ID_HELP. et où exactement on le trouve dans le progmmme ?
MERCI![]()
As-tu déjà programmé en Win32 fenêtré? c'est dans ce contexte qu'on parle de "message de fenêtre", et MFC est une surcouche par-dessus ça.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bonjour Médinoc,
Malheuresement non j'ai aucune expérience en win32! en fait c'est la 1ere fois que j'utilse MFC (après moins de 2 mois d'expérience en c++) ! (je suis plus orienté vers le c embarqué et Matlab) mais bon je suis obligé d'apprendre rappidement pour gérer mon stage :'( j'espère que tu m'as compris !
sinon dans le même projet et dans la classe monAppDlg y a ces intructions:
1 BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)
2 ON_WM_SYSCOMMAND()
3 ON_WM_PAINT()
4 ON_WM_QUERYDRAGICON()
5 ON_BN_CLICKED(IDC_BUTTON1, &CtestDlg::OnBnClickedButton1)
6 ON_BN_CLICKED(IDC_BUTTON2, &CtestDlg::OnBnClickedButton2)
7 ON_BN_CLICKED(IDOK, &CtestDlg::OnBnClickedOk)
END_MESSAGE_MAP()
par exemple l'instruction N°5 je l'ai bien compris:ID de message=IDC_BUTTON1
pointeur de fonction membre vers la fonction membre = &CtestDlg::OnBnClickedButton1 (c'est là où on va définir le traitement qui suit chaque clic sur ce boutton )
je vois que y a plusieurs macro en fait(ON_BN_CLICKED, ON_COMMAND,ON_WM_PAINT... ), et je ne sais pas si je vais arriver à les métiriser tous et faire la différences entre eux !![]()
Faire du MFC avant de connaître Win32, c'est vachement difficile.
Voici une petite piqure de rappel sur Win32:
En gros, chaque événement qui se produit sur une fenêtre est appelé un message, qui consiste en un ID définie par une constante (WM_COMMAND, WM_PAINT, WM_SYSCOMMAND...) et optionnellement des paramètres, regroupés en deux intptr_t appelés "wParam" et "lParam" pour des raisons qui remontent aux Windows 16 bits.
À chaque événement Win32, la procédure de fenêtre (ou la procédure de boîte de dialogue, légèrement différente) est appelée, avec l'ID de message et ses paramètres. Typiquement, elle fait un switch() sur l'ID de message et bosse dessus:
Dans la bibliothèque de MFC, il y a une procédure de fenêtre qui fait la même chose, mais au lieu de faire des switch(), elle parcoure la Message Map à la place, pour appeler la bonne fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 INT_PTR CALLBACK DialogProcedure( HWND hWnd, //Handle de fenêtre de la boîte de dialogue UINT message, //ID de message, WPARAM wParam, //premier intptr_t LPARAM lParam //second intptr_t ) { INT_PTR messageTraite = TRUE; switch(message) { case WM_COMMAND: { /*Extrait trois paramètres*/ unsigned short idCommande = LOWORD(wParam); unsigned short notification = HIWORD(wParam); HWND hWndControle = (HWND)lParam; //Handle de fenêtre du bouton /*Travail sur la notification, souvent avec un switch() sur idCommande */ switch(idCommande) { case IDC_BUTTON1: MonTraitementSiBouton1Clique(hWnd, notification, hWndControle); break; default: messageTraite = FALSE; break; } } break; case WM_PAINT: /*Dessine le contenu de la fenêtre*/ break; default: messageTraite = FALSE; break; } return messageTraite; }
La ligne ON_BN_CLICKED(IDC_BUTTON1, &CtestDlg::OnBnClickedButton1) signifie que quand un message WM_COMMAND sera reçu avec wParam contenant les valeurs BN_CLICKED et IDC_BUTTON1, la procédure de fenêtre appellera OnBnClickedButton1().
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager