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

Windows Discussion :

[Win32] Intercepter CTLCOLOR


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut [Win32] Intercepter CTLCOLOR
    Bonjour,
    J'ai créé une classe de fenetre qui me sert à faire un controle "Listbox" particulier et je lui assigne une couleur de fond "COLOR_WINDOW"
    Comment faire pour en changer le fond par la suite ?
    je ne pourrais pas intercepter le message WM_CTLCOLORLISTBOX dans la procedure qui crée mon controle comme pour un controle prédéfinit ...

    Merci.

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Le problème soulevé est intéressant et montre pourquoi la POO ne peut être adaptée à la programmation système Windows.
    Il faut s'inspirer des MFC ou de Qt ou WxWidget, désolé de cette réponse laconique.
    Pour contourner ce genre de pb les MFC fonctionne avec des macros ( genre afx_msg... ), Qt avec des signaux...
    Donc on peut utiliser le système de signaux de Qt par exemple.
    Si le controle List Box reçoit un signal qui lui est assigné, alors le traiter..

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par mat.M
    Le problème soulevé est intéressant et montre pourquoi la POO ne peut être adaptée à la programmation système Windows.
    Il faut s'inspirer des MFC ou de Qt ou WxWidget, désolé de cette réponse laconique.
    Pour contourner ce genre de pb les MFC fonctionne avec des macros ( genre afx_msg... ), Qt avec des signaux...
    Donc on peut utiliser le système de signaux de Qt par exemple.
    Si le controle List Box reçoit un signal qui lui est assigné, alors le traiter..
    J'avoue que ne connaissant ni MFC (ou très très peu), ni WxWidget et encore moins QT je ne peux pas m'en inspirer ni te dire si c'est effectivement la solution vers laquelle se tourner ...
    Mon problème est qu'il faudrait que dans la procédure qui appelle ma "Listbox", j'intercepte un message de cette derniere.
    Et pour l'intercepter un message du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case WM_CTLCOLORLISTBOX :
                SetBkColor ((HDC)wParam, RGB1);
                return ((DWORD) hBrush);
    il faut l'envoyer le "WM_CTLCOLORLISTBOX", mais d'où et à quel moment dans ma "Listbox" !!!

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par dede92
    J'avoue que ne connaissant ni MFC (ou très très peu), ni WxWidget et encore moins QT je ne peux pas m'en inspirer ni te dire si c'est effectivement la solution vers laquelle se tourner ...
    Mon problème est qu'il faudrait que dans la procédure qui appelle ma "Listbox", j'intercepte un message de cette derniere.
    Et pour l'intercepter un message du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case WM_CTLCOLORLISTBOX :
                SetBkColor ((HDC)wParam, RGB1);
                return ((DWORD) hBrush);
    il faut l'envoyer le "WM_CTLCOLORLISTBOX", mais d'où et à quel moment dans ma "Listbox" !!!
    Eh bien il faut l'envoyer avec SendMessage ou bien le récupérer dans la boucle de message
    ou bien avec GetMessage

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par mat.M
    Citation Envoyé par dede92
    J'avoue que ne connaissant ni MFC (ou très très peu), ni WxWidget et encore moins QT je ne peux pas m'en inspirer ni te dire si c'est effectivement la solution vers laquelle se tourner ...
    Mon problème est qu'il faudrait que dans la procédure qui appelle ma "Listbox", j'intercepte un message de cette derniere.
    Et pour l'intercepter un message du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case WM_CTLCOLORLISTBOX :
                SetBkColor ((HDC)wParam, RGB1);
                return ((DWORD) hBrush);
    il faut l'envoyer le "WM_CTLCOLORLISTBOX", mais d'où et à quel moment dans ma "Listbox" !!!
    Eh bien il faut l'envoyer avec SendMessage ou bien le récupérer dans la boucle de message
    ou bien avec GetMessage
    Dans la procedure du controle, au moment de dessiner j'envoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(GetParent(hwnd),WM_CTLCOLORLISTBOX,hdc,hwnd);
    et pour la procedure qui appelle le controle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case WM_CTLCOLORLISTBOX : 
                SetBkColor ((HDC)wParam, RGB1); 
                return ((DWORD) hBrush);
    et je recupère le HBRUSH dans le controle par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ColorClient = GetBkColor(hdc);
      SetBkColor(hdc,ColorClient);

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2008, 19h54
  2. Réponses: 5
    Dernier message: 08/06/2006, 16h11
  3. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  4. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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