IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

La macro ON_COMMAND


Sujet :

MFC

  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut La macro ON_COMMAND
    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

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    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.

  3. #3
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    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

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    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.

  5. #5
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    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 !

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    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:
    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;
    }
    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.

    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.

  7. #7
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    beaucoup plus claire merci M�dinoc

    sinon tu peux me dire que est ce qu'elle fait la fonction membre OnHelp() sera appel�e ? en fait je n'ai pas son effet durant l'excution du programme !

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    D�sol�, les Message Maps hors des fen�tres (ici, c'est dans CWinApp, qui h�rite de CWinThread), �a sort un peu de mes comp�tences. Mais il y a des chances que �a arrive quand ton thread principal re�oit un message WM_HELP qui n'est pas d�stin� � une fen�tre en particulier (PostThreadMessage() permet �a). Il doit y avoir certains contr�les MFC qui font �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.

  9. #9
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    ok je voie merci M�dinoc

  10. #10
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    sinon dans un projet SDI ou MDI, est ce que on peut rajouter un bouton ou una autre composant en utilisant la boite � Outil ?

    Dans un projet Based Dialog on peut faire �a il suffit aller au (fichiers de ressources -> Dialog ) et on glisse que est ce qu'on veut par contre en SDI et MDI je n'ai pas trouv� la fentre principale! que les fentres de boite dialogue qui sont dans le dossier Dialog

  11. #11
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu dois au moins pouvoir modifier les Toolbars de ta fen�tre SDI ou MDI avec les ressources.
    Si tu utilises le "Document / View model", tu dois aussi pouvoir arranger certaines vues (notamment, les CFormView sont des bo�tes de dialogue aussi).

    Mais g�n�ralement, ce qu'on rajoute dans la fen�tre principale (qui peut �tre aussi simple qu'une EditBox qui fait toute la fen�tre), il faut l'int�grer "� la main", dans le code. Tr�s d�r si tu ne t'y connais pas d�j�, donc je te conseillerais de te limiter aux bo�tes de dialogues et aux CFormView.
    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.

  12. #12
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2011
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Par d�faut
    oui je te comprends mais l� j'ai arriv� � bien manipuler les boites de dialogue et il faut que je passe maintenant au applications de type SDI ou MDI qui sont similaires � l'application sur la quelle je devrais travailler

    mais ta r�ponse �tait claire " ...il faut l'int�grer '� la main' ..." et c'�tait ce que je cherchais � savoir !

    Merciiii M�dinoc

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VB6] Ex�cuter une macro Access
    Par Nektanebos dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 22/02/2006, 16h32
  2. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 18/12/2002, 14h30
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    R�ponses: 2
    Dernier message: 01/09/2002, 03h38
  5. R�ponses: 2
    Dernier message: 22/07/2002, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo