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

GTK+ avec C & C++ Discussion :

Modifier le pointeur de la souris


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut Modifier le pointeur de la souris
    Bonsoir,

    Je suis sous Windows 10, avec Code:Blocs 13.12, GTK 3.6.4 et j'utilise le langage C.

    Je cherche comment faire pour changer le pointeur de ma souris lorsque cette dernière rentre dans un widget bien précis qui est dans le cas présent un "label".

    Mais nombreuses recherches sur internet non rien données et les quelques exemples que j'ai pu trouver ne fonctionnent pas.

    Merci de bien vouloir m'expliquer comment faire avec si possible un petit bout de code.

    Bonne soirée. (ou bonne journée selon le cas... )

    Claude

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Pour modifier la forme de la souris il faut passer par les GdkCursor.

    Ta problématique fait appel à plusieurs principes :
    • détecter la présence de la souris dans le widget,
    • modifier la forme de la souris en fonction de cette position,
    • redonner la forme antérieure de la souris si la souris est en dehors du widget.

    Pour la position de la souris il faut comprendre tout d'abord que tous les widgets de Gtk+ héritent des GtkWidget. On par donc de ces derniers et on regarde quels signaux ils peuvent émettre lorsque la souris les survole. On trouve par exemple :

    Voila quelques pistes pour commencer à écrire un code fonctionnel .

  3. #3
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Bonjour à tous,

    Je rejoint gerald3d en complétant que tout les Widget Gtk ne possède pas de GdkWindow nécessaire a l'émission des signaux "enter-notify-event" et consort.
    Par example un GtkLabel n'enverra pas de signal au passage de la souris. A contrario un GtkLinkButton te signalera le survole de la souris.

    Mais nombreuses recherches sur internet non rien données
    Sans bougé, avec un doigt : lorsque la souris survole un des boutons

    et les quelques exemples que j'ai pu trouver ne fonctionnent pas.
    Tu as un exemple à nous montrer ?

  4. #4
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut Ça y est, enfin.
    Bonsoir,

    Tout d’abord, un grand merci à vous deux, gerald3d et Gaulois pour votre réponse.

    Même si dans un premier temps j’ai intérieurement râlé.

    Et oui ! "Merde, ils ne m’ont pas envoyé de code tout fait… ". La paresse.

    Mais après réflexion et grâce à vos commentaires et liens divers, j’ai enfin compris où j’avais MERDÉ. (Et le mot n’est pas trop fort.)

    Je ne vous dirais pas où… j’en ai honte !

    Pour ma défense,cela fait un long, un très long moment que j’ai laissé tombé la programmation et je viens de m’apercevoir que j’en ai oublié les bases élémentaires.

    Mais bon, c’est comme ça.

    Ça reviendra avec le temps, les efforts, la persévérance, la patience… et tout et tout. LA PREUVE...

    Pour ceux que ça pourrait intéresser, je laisse ci-dessous un bout de code.

    Pour palier aux problèmes du GtkLabel (cité par Gaulois), j’ai fait appel au "event-box".

    Ce qui m’a permis aussi de colorier la "box".

    Encore une fois merci.


    Vous ne m’avez pas donné un poisson, mais offert une canne à pêche de compétition.

    Bien à vous.

    Claude.



    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
     
    #include "main.h"
     
    /// Fonction pour la fermeture de la fenêtre. La X en haut à droite.
    extern void Quitte(GtkWidget *pWidget, gpointer pData)
    {
        gtk_main_quit();    //Arrêt de la boucle évènementielle.
     
     
        // Paramètres non utilisés.
       (void) pWidget;
       (void) pData;
    }
     
     
    /// Fonction pour le changement de curseur de souris. (Main)GtkWidget *pWidget, GdkEventMotion *event,
    extern void Curseur_Main(GtkWidget *pWindow)
    {
        GdkCursor *pCursor = NULL;
        pCursor = gdk_cursor_new(GDK_HAND2);
        GdkWindow *gdk_window = NULL;
        gdk_window = gtk_widget_get_window(GTK_WIDGET(pWindow));
        gdk_window_set_cursor (gdk_window, pCursor);
    }
     
     
    /// Fonction pour le changement de curseur de souris. (Flèche)
    extern void Curseur_Arrow(GtkWidget *pWindow)
    {
        GdkCursor *pCursor = NULL;
        pCursor = gdk_cursor_new(GDK_ARROW);
        GdkWindow *gdk_window = NULL;
        gdk_window = gtk_widget_get_window(GTK_WIDGET(pWindow));
        gdk_window_set_cursor (gdk_window, pCursor);
    }

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    #include "main.h"
     
    extern void Box1(GtkWidget *pWindow)
    {
        //Création des pointers.
        GtkWidget *pVBox     = NULL;
        GtkWidget *pHBox     = NULL;
        GtkWidget *pLabel1   = NULL;
        GtkWidget *pLabel2   = NULL;
        GtkWidget *pLabel3   = NULL;
     
        //Création et ajout de la box GLOBALE Horizontale.
        pHBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_container_add(GTK_CONTAINER(pWindow), pHBox);
     
        //Création de la box verticale.
        pVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 15);
        gtk_widget_set_size_request(pVBox, 150, -1); //Largeur de la Box.
     
        //Création d'une "event_box" pour colorier la pVBOX.
        GtkWidget *pEvent_box = gtk_event_box_new();
     
        //Définition de la couleur de la "event_box".
        GdkColor color;
        gdk_color_parse("#77B5FE", &color); //Bleu ciel.
        gtk_widget_modify_bg(pEvent_box, GTK_STATE_NORMAL, &color);
     
     
        GtkWidget *pDate = gtk_label_new("Ici la date du jour.");
        gtk_box_pack_start(GTK_BOX(pVBox), pDate, FALSE, FALSE, 30);
     
        pLabel1 = gtk_label_new ("- Click here to quit.");
        GtkWidget *pLabel1_event_box = gtk_event_box_new();  //Pour le rendre cliquable.
        gtk_container_add(GTK_CONTAINER (pLabel1_event_box), pLabel1);
        gtk_container_add(GTK_CONTAINER (pVBox), pLabel1_event_box);
        g_signal_connect(G_OBJECT(pLabel1_event_box), "enter-notify-event",
                         G_CALLBACK(Curseur_Main), pWindow);
        g_signal_connect(G_OBJECT(pLabel1_event_box), "leave-notify-event",
                         G_CALLBACK(Curseur_Arrow), pWindow);
        g_signal_connect(G_OBJECT(pLabel1_event_box), "button-press-event",
                         G_CALLBACK(Quitte), NULL);
     
        pLabel2 = gtk_label_new ("- Click here to quit.");
        GtkWidget *pLabel2_event_box = gtk_event_box_new();  //Pour le rendre cliquable.
        gtk_container_add(GTK_CONTAINER (pLabel2_event_box), pLabel2);
        gtk_container_add(GTK_CONTAINER (pVBox), pLabel2_event_box);
        g_signal_connect(G_OBJECT(pLabel2_event_box), "enter-notify-event",
                         G_CALLBACK(Curseur_Main), pWindow);
        g_signal_connect(G_OBJECT(pLabel2_event_box), "leave-notify-event",
                         G_CALLBACK(Curseur_Arrow), pWindow);
        g_signal_connect(G_OBJECT(pLabel2_event_box), "button-press-event",
                         G_CALLBACK(Quitte), NULL);
     
        pLabel3 = gtk_label_new ("- Click here to quit.");
        GtkWidget *pLabel3_event_box = gtk_event_box_new();  //Pour le rendre cliquable.
        gtk_container_add(GTK_CONTAINER (pLabel3_event_box), pLabel3);
        gtk_container_add(GTK_CONTAINER (pVBox), pLabel3_event_box);
        g_signal_connect(G_OBJECT(pLabel3_event_box), "enter-notify-event",
                         G_CALLBACK(Curseur_Main), pWindow);
        g_signal_connect(G_OBJECT(pLabel3_event_box), "leave-notify-event",
                         G_CALLBACK(Curseur_Arrow), pWindow);
        g_signal_connect(G_OBJECT(pLabel3_event_box), "button-press-event",
                         G_CALLBACK(Quitte), NULL);
     
        //On met pVBox dans event_box pour récupérer la couleur.
        gtk_container_add(GTK_CONTAINER(pEvent_box), pVBox);
        gtk_container_add(GTK_CONTAINER(pHBox), pEvent_box);
     
        //Bordure autour du container principal. (largeur = 5)
        gtk_container_set_border_width (GTK_CONTAINER(pHBox), 5);
    }

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

Discussions similaires

  1. Modifier le pointeur de la souris
    Par pat04 dans le forum IHM
    Réponses: 7
    Dernier message: 14/11/2014, 11h59
  2. Modifier le pointeur de la souris ?
    Par ESSENCESOR dans le forum IHM
    Réponses: 6
    Dernier message: 24/02/2007, 00h40
  3. Réponses: 5
    Dernier message: 23/08/2005, 12h08
  4. modifier pointeur de la souris au survol d'une case
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/06/2005, 17h54

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