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

C++ Discussion :

Fonction pour la manupilation de la sourie


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut Fonction pour la manupilation de la sourie
    J'ai crée une fenetre window API dans cette fenetre un bouton X pas de probleme .
    Mais vue que je suis debutant j'ai du mal a trouver comment faire pour que quand j'appuye sur le bouton gauche de la sourie en pointant le cursor sur le bouton X que j'ai crée l'aplication X que j'ai ecrit s'execute .
    Un coup de pousse SVP.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Dans le traitement du message WM_COMMAND avec le numéro du bouton, tu fais un appel à CreateProcess().
    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é
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    bonjour !
    merci pour la reponse , SVP un peu plus de detail je ne suis pas expert pour l'instant .
    J'ai introduit une fonction de manupilation de la sourie dans le LRESULT CALLBACK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    POINT pt,pt1;
    switch (Message) { 
          case WM_LBUTTONDOWN: {              
                  GetCursorPos(&pt);                  
                   pt1=pt;                 
                   ScreenToClient(Handle,&pt1);          
                   return 0;
                }
           }
    Peut etre que ce n'est pas comme ça qu il faut utiliser cette fonction pour que je puisse dire au programme que :
    si il y'a execution de WM_LBUTTONDOWN sur la zone de surface du Bouton 1 , executez application 1

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Tu veux dire que ton bouton est un bouton "windowless" plutôt qu'un vrai contrôle de la classe "BUTTON" ?
    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é
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    salut !
    Mon bouton est du genre HWND comme dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     HWND exemple = CreateWindow("BUTTON","Bouton1",
    WS_VISIBLE| WS_BORDER,600,400,200,200,0,0,hInstance,NULL );

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Dans ce cas, tu n'as pas à t'embêter avec WM_LBUTTONDOWN.
    Donne simplement une valeur au paramètre juste avant hInstance (généralement, on commence à 1000), castée en HMENU, et quand le bouton sera cliqué, tu recevra un message WM_COMMAND avec cette valeur dans LOWORD(wParam).
    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é
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    j ai rentré la valeur " 1000 " dans dans le 9 éme parametre mais à la compilation le compilateur envoie 2 mesage d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    error : invalid conversion from ' int ' to ' HMENU_* '
    error : initilizing argument 10 of ' HMENU_* 'Create WindowExA (DWORD , const CHAR *,
           const CHAR*,DWORD,int,int,int,int,HWND_*, HMENU_*, HINSTANC_*,void*)

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    J'ai dit aussi qu'il fallait caster ledit paramètre en (HMENU).
    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é
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    Bonjour !
    j ai essayer tes solution et aussi d'autre solution mais ce n'etait pas ce que je voulu ,peut etre que je me suis mal exprimer .
    Dans l'exercice il y a:
    Une fenetre principale de bienvenue dans cette fenetre il y a des bouton bouton1 , bouton2.....etc , et un texte qui dit si vous voulez application1 pousser bouton1 ...etc .
    Peut etre que le code exemple suivant explique mieu que moi :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include <windows.h>
    LRESULT CALLBACK OnEvent(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam){
        switch (Message) {
            case WM_CLOSE : {
                PostQuitMessage(0);
                return 0;
            }
            case WM_COMMAND:
                {     // comment faire pour que ce MessageBox s'execute en clickant sur bouton1
                    MessageBox(NULL, "Vous avez poussez le Bouton1 !", "Bouton1 ",0);
                    return 0;
                }
                {   // comment faire pour que ce MessageBox s'execute en clickant sur bouton2
                    MessageBox(0,"Vous avez pouser le Bouton2 !","Bouton2",0);
                    return 0;
                }
        }
        return DefWindowProc(Handle, Message, WParam, LParam);
    }
     
    INT WINAPI WinMain(HINSTANCE Instance, HINSTANCE, LPSTR, INT) {
        WNDCLASS WC;
        WC.style = 0;
        WC.lpfnWndProc = &OnEvent;
        WC.cbClsExtra = 0;
        WC.cbWndExtra = 0;
        WC.hInstance = Instance;
        WC.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        WC.hCursor = LoadCursor(NULL, IDC_ARROW);
        WC.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND);
        WC.lpszMenuName = 0;
        WC.lpszClassName = "Exercice";
         RegisterClass(&WC);
        HWND Window = CreateWindow("Exercice", "Exemple", WS_SYSMENU |
                WS_OVERLAPPEDWINDOW| WS_VISIBLE,0,0,  800, 600, NULL, NULL, Instance, NULL);
     
        HWND bouton1 = CreateWindow("BUTTON","Bouton1", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS ,
                                        85, 50, 100, 50, Window,0, Instance, NULL);
        HWND bouton2 = CreateWindow("BUTTON","Bouton2", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,
                                        185, 50, 100, 50, Window, NULL, Instance, NULL);
     
      MSG Message;
        Message.message = ~WM_QUIT;
        while (Message.message != WM_QUIT) {
            if (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
                TranslateMessage(&Message);
                DispatchMessage(&Message);
            }
        DestroyWindow(Window);
        UnregisterClass("Exercice", Instance);  
        return 0;
    }

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Code C++ : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <windows.h>
     
    #define IDC_BOUTON1 1000
    #define IDC_BOUTON2 1001
     
    /* On utilise le pattern SESE (Single Entry, Single Exit)
       sinon on ne s'en sort pas. */
    LRESULT CALLBACK OnEvent(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam) {
    	LRESULT ret = 0;
    	switch (Message) {
    	case WM_DESTROY :
    		PostQuitMessage(0);
    		break;
     
    	case WM_COMMAND:
    		switch (LOWORD(WParam)) {
    		case IDC_BOUTON1:
    			MessageBox(NULL, TEXT("Vous avez poussé le Bouton1 !"), TEXT("Bouton1"), 0);
    			break;
    		case IDC_BOUTON2:
    			MessageBox(0, TEXT("Vous avez poussé le Bouton2 !"), TEXT("Bouton2"), 0);
    			break;
    		default:
    			ret = DefWindowProc(Handle, Message, WParam, LParam);
    			break;
    		}
    		break;
     
    	default:
    		ret = DefWindowProc(Handle, Message, WParam, LParam);
    		break;
    	}
    	return ret;
    }
     
    INT WINAPI WinMain(HINSTANCE Instance, HINSTANCE, LPSTR, INT) {
    	WNDCLASS WC;
    	WC.style = 0;
    	WC.lpfnWndProc = &OnEvent;
    	WC.cbClsExtra = 0;
    	WC.cbWndExtra = 0;
    	WC.hInstance = Instance;
    	WC.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	WC.hCursor = LoadCursor(NULL, IDC_ARROW);
    	WC.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND);
    	WC.lpszMenuName = 0;
    	WC.lpszClassName = TEXT("Exercice");
    	RegisterClass(&WC);
    	HWND Window = CreateWindow(
    	 TEXT("Exercice"), TEXT("Exemple"), WS_SYSMENU | WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    	 0, 0, 800, 600, NULL, NULL, Instance, NULL
    	 );
     
    	HWND bouton1 = CreateWindow(
    	 TEXT("BUTTON"), TEXT("Bouton1"), WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS ,
    	 85, 50, 100, 50, Window, reinterpret_cast<HMENU>(IDC_BOUTON1), Instance, NULL
    	 );
    	HWND bouton2 = CreateWindow(
    	 TEXT("BUTTON"), TEXT("Bouton2"), WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,
    	 185, 50, 100, 50, Window, reinterpret_cast<HMENU>(IDC_BOUTON2), Instance, NULL
    	 );
     
    	//Pourquoi une boucle d'attente active?
    	/*MSG Message;
    	Message.message = ~WM_QUIT;
    	while (Message.message != WM_QUIT) {
    		if (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
    			TranslateMessage(&Message);
    			DispatchMessage(&Message);
    		}
    	*/
    	//DestroyWindow(Window); Tu fais ça mal. La fenêtre soit se détruire elle-même et juste prévenir qu'elle est détruite.
     
    	MSG Message;
    	while (GetMessage(&Message, NULL, 0, 0) > 0)
    	{
    		TranslateMessage(&Message); //Traduit WM_KEYDOWN en WM_CHAR
    		DispatchMessage(&Message);
    	}
     
    	UnregisterClass("Exercice", Instance);
    	return 0;
    }
    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.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    Merci pour toute l aide que tu ma donner .
    à bientot !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/08/2014, 15h10
  2. Fonction pour position souris
    Par themarki dans le forum C
    Réponses: 0
    Dernier message: 04/05/2011, 14h28
  3. Réponses: 12
    Dernier message: 02/09/2009, 18h24
  4. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29
  5. Fonction pour récuperer mon adresse IP
    Par néo333 dans le forum Web & réseau
    Réponses: 11
    Dernier message: 01/11/2003, 17h35

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