Changer la couleur de fond de son app

Résolu
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012 - 22 août 2008 à 06:45
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012 - 22 août 2008 à 14:01
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

racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
22 août 2008 à 11:23
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;
}
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 14
22 août 2008 à 09:46
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.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 14
22 août 2008 à 10:39
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;
}
0
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012
22 août 2008 à 10:56
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 ......
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 14
22 août 2008 à 11:15
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...
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
22 août 2008 à 11:29
rt15 > ton exemple va bon mais fais comme racpp, ne pas créer le brush à chaque event.

ciao...
BruNews, MVP VC++
0
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012
22 août 2008 à 14:01
[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
0