Changer la couleur de fond de son app [Résolu]

Signaler
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012
-
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012
-
Bonjour

Voila mon souci
Je creer une mon app en appelant
DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
Mais je trouve pas le moyen de changer la couleur de fond
J'ai essayé avec
hBrush=CreateSolidBrush(RGB(0,0,255))
Mais sans succé....
quelqu'un sais comment faire ??

Merci

7 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Il suffit de traiter le message WM_CTLCOLORDLG en retournant le HBRUSH de la couleur voulue. Exemple:

BOOL CALLBACK DialogProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HBRUSH couleurfond;
    switch(message)
    {
       case WM_INITDIALOG:
          couleurfond=CreateSolidBrush(RGB(0,0,255));
          //...
          return 0;

       case WM_CTLCOLORDLG:
          return (BOOL)couleurfond;

       case WM_CLOSE:
          DeleteObject(couleurfond);
          EndDialog(hDlg,0);
          break;

       default:
          break;
    }
    return 0;
}
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Je n'ai pas encoreappris à faire les resources, donc pas de DialogBox pour moi...

Cependant, quand tu appelles DialogBox, tu lui passe en paramètre la fonction qui va être appelée en cas de réception d'un message.

Si, dans cette fonction, tu traites le message WM_ERASEBKGND, et tu dessine avec ton brush un rectangle de la taille de ta DialogBox, avec un code dans ce genre là :

      hBackBrush = CreateSolidBrush(nColor);
     
      // Dessin de la fenêtre
      GetClientRect(_hWnd, &back);
      FillRect((HDC)wParam, &back, hBackBrush);
      DeleteObject(hBackBrush);

Un exemple ici, mais avec une vrai fenêtre.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Houlà je me suis pas relu là... Que de fautes.

Bon, bin maintenant, je sais vaguement faire des ressources.
Merci jb212121 !

<hr />#include "windows.h"
#include "resource.h"

HINSTANCE _hThisInstance;              // Handle du module

//
// Traitement des messages.
//
LRESULT CALLBACK DialogProcedure(HWND hDlg, UINT nMessage, WPARAM wParam, LPARAM lParam)
{
  HBRUSH hBackBrush;     // Brush de dessin de l'arrière plan de la fenêtre
  RECT back;             // Rectangle de la zone cliente/fenêtre
 
  switch (nMessage)
  {
    case WM_INITDIALOG:
      return TRUE;

    case WM_ERASEBKGND:
      // Création du brush de dessin de l'arrière plan de la DilaogBox
      hBackBrush = CreateSolidBrush(RGB(0, 0, 255));
     
      // Dessin du fond
      GetClientRect(hDlg, &back);
      FillRect((HDC)wParam, &back, hBackBrush);
      DeleteObject(hBackBrush);

      return TRUE;

    case WM_COMMAND:
      if (LOWORD(wParam) == IDOK)
        MessageBox(hDlg, "Hello world !", "Kikoo", MB_OK);
      else if (LOWORD(wParam) == IDCANCEL)
        EndDialog(hDlg,0);

      return TRUE;
  }
  return FALSE;
}

#pragma comment(linker, "/entry:main")
INT32 _cdecl main()
{
  // Récupération du handle du module
  _hThisInstance = GetModuleHandle(NULL);

  DialogBox(_hThisInstance, MAKEINTRESOURCE(MAIN_DLG), 0, DialogProcedure);

  // Code d'erreur en sortie
  return 0;
}
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012

Sa marche pas quand je l'intégre a mon apli.....
Il doit bien y avoir un moyen de changer la couleur de fond quand meme ......
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Houla. Soit plus précis svp.

"Sa marche pas"

Ca ne compile pas ? -> Quel message d'erreur ?
Ca plante ?
La couleur ne change pas ?
Cela pose des problème d'affichage (Interférence avec d'autres composants...) ?

Tu peux évenutellement copier-coller ici une partie de ton code, notamment la fonction qui traite les messages (AppDlgProc si je me réfère à ton premier poste).

Et bien sûr que c'est possible : je t'ai déjà donné deux exemples de codes complets...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
rt15 > ton exemple va bon mais fais comme racpp, ne pas créer le brush à chaque event.

ciao...
BruNews, MVP VC++
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012

[auteur/RT15/464943.aspx rt15] Tout se compile nickel mais ca ne fait rien.

En revanche ton code marche impecable

[auteur/RACPP/295159.aspx racpp]



Merci beaucoup