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 :

changer la couleur d'un �l�ment cr�� par CreateWindow()


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Avril 2005
    Messages
    82
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 82
    Par d�faut changer la couleur d'un �l�ment cr�� par CreateWindow()
    Bonjour � tous !
    Voil� je cr�e des boutons avec CreateWindow() et je n'ai pas la possibilit� de construire graphiquement l'interface.
    J'aimerai pouvoir changer la couleur de mes boutons...
    J'ai regard� ce topic sur le forum : http://www.developpez.net/forums/viewtopic.php?t=324595

    Mais j'ai des probl�mes � utiliser cette solution : dans quelle ordre doivent �tre mises les fonctions ? est-ce qu'elles sont dans des fichiers diff�rents ?

    Enfin si quelqu'un pouvait m'aider ...

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    quel est le probl�me ?
    tu n'arrives pas � mettre en place la solution ?
    ca ne marche pas ?

  3. #3
    Membre confirm�
    Inscrit en
    Avril 2005
    Messages
    82
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 82
    Par d�faut
    je n'arrive pas � mettre en place la solution !

    J'ai une fonction g�n�rale
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    LRESULT CALLBACK WndProc( HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam )
    dans laquelle je d�clare mes boutons et apr�s j'ai un switch avec

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    case WM_NOTIFY: { }
    case WM_COMMAND: {}
    ...
    Est-ce que c'est l� que je dois rajouter le case WM_PAINT ?

    est-ce que je dois mettre le bouton dans ma fonction d'origine WndProc ?

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    en fait, tu as deux m�thodes,
    une premi�re que j'ai d�crite et o� il faut sous classer le bouton, donc faire une nouvelle callback (dans l'exemple BOOL CALLBACK butProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam) )
    et une autre m�thode d�crite par Aur�lien (owner drawing), o� ca se passe dans la callback principale (winproc) mais o� c'est un autre message qu'il faut traiter

  5. #5
    Membre confirm�
    Inscrit en
    Avril 2005
    Messages
    82
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 82
    Par d�faut
    La premi�re solution n�cessite que tu fasses 2 callback : une premi�re dans laquelle tu cr�es ton bouton et une autre dans laquelle tu g�res le WM_PAINT ? et qu'est ce que tu entends par sous-classer ?

    Merci d'aider les gens un peu nuls !

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    c'est le principe du sous-classement.

    Pour ta fenetre, tu as une fonction (callback) qui g�re les messages (redimensionnement, click sur les menus, etc ...)

    Et tu peux faire de meme pour un bouton pour d�finir plus pr�cis�ment, comme par exemple faire un dessin diff�rent.

    donc un truc comme ca :
    Citation Envoy� par nico-pyright(c)
    alors, en fait, je ne pensais pas � ca

    Ce que je te proposais, c'�tait d'affecter une windowProc � ton bouton : � sa cr�ation :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    but = CreateWindowEx(0, "BUTTON", "Appuyer ici", WS_VISIBLE|WS_CHILD| WS_BORDER, 20, 100, 200, 40, hwnd, (HMENU)ID_BUTTON, ghInstance, NULL);
    ancienneButProc = (WNDPROC) SetWindowLong(but,GWL_WNDPROC,(long)butProc);
    puis de r�d�finir le paint dans ta nouvelle callback
    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
    WNDPROC ancienneButProc;
     
     
    BOOL CALLBACK butProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
    {
    	HDC hdc;
        PAINTSTRUCT ps;
    	RECT rect;
    	switch(mssg)
    	{
    		case WM_PAINT:
    			hdc = BeginPaint (hwnd, &ps);
    			GetClientRect (hwnd, &rect);
    			SelectObject(hdc, GetStockObject(BLACK_BRUSH)); 
    			Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom); 
    			EndPaint (hwnd, &ps);
    			return 0;
    	}
    	return CallWindowProc(ancienneButProc, hwnd, mssg, wParam, lParam);
    }
    c'est la fonction butProc qui g�rera les �venements du bouton, en l'occurence son dessin (WM_PAINT)

  7. #7
    Membre �m�rite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par d�faut
    Ya plus simple sans faire des callbacks: il suffit de traiter le message WM_COLORBTN.

    WM_CTLCOLORBTN
    The WM_CTLCOLORBTN message is sent to the parent window of a button when the button is about to be drawn. By responding to this message, the parent window can set a button's text and background colors.

    WM_CTLCOLORBTN
    hdcButton = (HDC) wParam; // handle to the button display context
    hwndButton = (HWND) lParam; // handle to the button

    Parameters
    hdcButton
    Value of wParam. Handle to the display context for the button.
    hwndButton
    Value of lParam. Handle to the button.
    Return Values
    If an application processes this message, it must return a handle to a brush. The system uses the brush to paint the background of the button.

Discussions similaires

  1. JComboBox : Changer la couleur d'un �l�ment ?
    Par wam111 dans le forum Composants
    R�ponses: 8
    Dernier message: 24/06/2014, 11h26
  2. Changer la couleur d'un �l�ment d'un listView
    Par bitoons dans le forum Composants graphiques
    R�ponses: 9
    Dernier message: 03/06/2011, 13h28
  3. R�ponses: 11
    Dernier message: 15/04/2005, 15h42
  4. [JList] changer la couleur d'UN �l�ment
    Par youb dans le forum Composants
    R�ponses: 1
    Dernier message: 31/03/2005, 11h31
  5. R�ponses: 2
    Dernier message: 01/12/2004, 22h48

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