begin process at 2010 02 10 06:16:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

probleme fenêtre sous windows


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme fenêtre sous windows

mercredi 5 juillet 2006 à 12:06:07 | probleme fenêtre sous windows

vixare

Bonjour  à tous je debute en C++ sous windows et je voulais créer une fenêtre(fond bleu ) découpé en 9 rectangles à la  bordure jaune.La fenêtre s'affiche normalement mais les rectangles n'apparaissent pas si quelqu'un peut m'aider merci beaucoup.
Voila le code :


#include <windows.h>                      
                    
//------------------------------------------------------------------------------
// Comme il n'y a pas de fichier ressource ; on n'utilisera pas non plus
// de fichier .h, afin de simplifier au maximum.
// Toutes les définitions sont dans le fichier principal....
//------------------------------------------------------------------------------

#define ID_MENU                         500

#define IDM_QUITTER                     101

#define IDM_NOUVELLEPARTIE              102

#define IDM_AIDE                        103

#define IDM_INSTRUCTIONS                104
#define IDM_BLEU                        105
#define IDM_ROUGE                       106
#define IDM_BLANC                       107
HDC hDc;


   
#define Ox1  0          // coord rectangle ou région 1 :
#define Oy1  0          //               {0, 0, nLarg, nHaut}

#define Ox2  nLarg      // coord rectangle ou région 2 :
#define Oy2  0          //                    {nLarg, 0, 2 * nLarg, nHaut}

#define Ox3  2 * nLarg  // coord rectangle ou région 3 :
#define Oy3  0          //              {2 * nLarg, 0, 3 * nLarg, nHaut}

#define Ox4  0  // coord rectangle ou région 4 :
#define Oy4  nHaut         //               {0, nHaut,  nLarg, 2*nHaut}

#define Ox5  nLarg         // coord rectangle ou région 5 :
#define Oy5  nHaut      //              {nLarg, nHaut, 2*nLarg, 2 * nHaut}
                     
#define Ox6  2 * nLarg      // coord rectangle ou région 6 :
#define Oy6  nHaut      //             {2*nLarg, nHaut, 3* nLarg, 2 * nHaut};

#define Ox7  0  // coord rectangle ou région 7 :      
#define Oy7  2*nHaut      //          {0, 2*nHaut,  nLarg, 3 * nHaut}

#define Ox8  nLarg // coord rectangle ou région 8 :      
#define Oy8  2 * nHaut      // {nLarg,2* nHaut, 2 * nLarg, 3 * nHaut};

#define Ox9  2 * nLarg //coord rectangle ou région 9:
#define Oy9  2 * nHaut     //{2*nLarg,2*nHaut,3*nLarg,3*nHaut};

#define X  nLarg / 10   
#define Y  nHaut / 10 
static int nLarg;
static int nHaut;
static int nXdroit;
static int nXgauche;
static int nYhaut;
static int nYbas;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
HWND hWnd; 
       
HMENU hMenu;             
HMENU hMenuPopup;        
HMENU hSousMenuPopup;

 
HBRUSH hBackground   =  CreateSolidBrush(RGB(0,0,255)); // Bleu
                                      // Il s'agit de la couleur
                                      // à l'ouverture de la fenêtre
                                                                                                            
static char szClassName[ ] = "Fenêtre Windows";
                           
static HBRUSH hBlanc, hGris, hJaune,hRouge;  
static HRGN rgnRegion_1, rgnRegion_2, rgnRegion_3, rgnRegion_4, rgnRegion_5,
            rgnRegion_6, rgnRegion_7, rgnRegion_8, rgnRegion_9;
static int cxZone_Client, cyZone_Client;
                     

 


//------------------------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpcmdLine,
                    int nCmdShow)
{
   
    WNDCLASSEX wincl;   

    wincl.hInstance                =            hThisInstance;   
    wincl.lpfnWndProc              =            WindowProcedure; 
    wincl.hbrBackground            =            hBackground;     
    wincl.style                    =            CS_HREDRAW | CS_VREDRAW;               
    wincl.lpszClassName            =            szClassName;      
    
                      
    
    wincl.cbSize                   =           sizeof (WNDCLASSEX);
                                                // Taille de  WNDCLASSEX
         
    wincl.hIcon                    =           LoadIcon (NULL, IDI_APPLICATION);
                                                // Utilise l'icône prédéfinie


    wincl.hIconSm                  =           LoadIcon (NULL, IDI_APPLICATION);
                                                // Utilise l'icône prédéfinie

    wincl.hCursor                  =            LoadCursor (NULL, IDC_ARROW);
                                        // Utilise le curseur standard (flêche)

    wincl.lpszMenuName             =            NULL;      
                                 // Pointeur sur la ressource menu (ici le menu
                                 // est initialise par SetMenu(hWnd, hMenu);
                                 // la valeur est donc à  NULL                                        

    wincl.cbClsExtra = 0;            // Non utilisé pour l'instant
    wincl.cbWndExtra = 0;            // Non utilisé pour l'instant
   
// -----------------------------------------------------------------------------

    if (RegisterClassEx (&wincl) == false)
                 return 0 ;              
                   

    else {
    MessageBox(hWnd,
    "??",
                                            "Initialisation",MB_OK);
         }              
                     
// -----------------------------------------------------------------------------        

hWnd = CreateWindowEx
           (0,                            
           szClassName,                   
           "fenêtre windows"        ,   
          
           WS_OVERLAPPEDWINDOW,          
           CW_USEDEFAULT,      
           CW_USEDEFAULT,      
           CW_USEDEFAULT,      
           CW_USEDEFAULT,     
           HWND_DESKTOP,       
           NULL,            // Menu créé sans fichier ressource
                            // cet argument reste à NULL            
           hThisInstance,     
           NULL                
           );

ShowWindow (hWnd, nCmdShow);


 


hMenu = CreateMenu();

hMenuPopup = CreateMenu();

    
AppendMenu (hMenuPopup , MF_STRING | MF_DISABLED, IDM_NOUVELLEPARTIE, "&Nouvelle partie (INACTIVE");
AppendMenu (hMenuPopup , MF_SEPARATOR, 0, NULL);
AppendMenu (hMenuPopup , MF_STRING, IDM_QUITTER , "&Quitter"); 

AppendMenu (hMenu, MF_POPUP,(UINT)(hMenuPopup), "&Options");

hMenuPopup = CreateMenu();

    
AppendMenu (hMenuPopup , MF_STRING , IDM_INSTRUCTIONS, "&Instructions"); 
AppendMenu (hMenu, MF_POPUP,(UINT)(hMenuPopup), "&Aide");

SetMenu(hWnd, hMenu);

UpdateWindow (hWnd);
                     
ShowWindow (hWnd,SW_MAXIMIZE);
                 

MSG messages;
   

  
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);

        DispatchMessage(&messages);
    }

    return messages.wParam;
}


    LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT messages, WPARAM wParam, 
                                                                  LPARAM lParam)
{    
           
    nLarg = cxZone_Client/3;
    nHaut = cyZone_Client/3;
   
    // Puis on défini les 9 rectangles utilisés dans le contexte 1 à partir
    // des valeurs Ox, Oy, x et y. 
 
   
    RECT rectangle_1 = {Ox1, Oy1, Ox1 + 10*X, Oy1 + 10*Y};
    RECT rectangle_2 = {Ox2, Oy2, Ox2 + 10*X, Oy2 + 10*Y};
    RECT rectangle_3 = {Ox3, Oy3, Ox3 + 10*X, Oy3 + 10*Y};
    RECT rectangle_4 = {Ox4, Oy4, Ox4 + 10*X, Oy4 + 10*Y};   
    RECT rectangle_5 = {Ox5, Oy5, Ox5 + 10*X, Oy5 + 10*Y};
    RECT rectangle_6 = {Ox6, Oy6, Ox6 + 10*X, Oy6 + 10*Y};
    RECT rectangle_7 = {Ox7, Oy7, Ox7 + 10*X, Oy7 + 10*Y};
    RECT rectangle_8 = {Ox8, Oy8, Ox8 + 10*X, Oy8 + 10*Y}; 
 RECT rectangle_9 = {Ox9, Oy9, Ox9 + 10*X, Oy9 + 10*Y};
   
   
   
    PAINTSTRUCT ps; // Déclaration d'un objet de structure PAINTSTRUCT.

                                                      LPARAM lParam)

    static int nSelection = IDM_BLEU;
    POINT point;                  
                 
                 
 
    switch (messages) 
                                      
    {

   
                  
 case WM_PAINT:
  {
   hDc = BeginPaint(hWnd, &ps);
          HBRUSH hJaune;
          hJaune        =  CreateSolidBrush(RGB(255,255,0));
        SelectObject(hDc, hJaune);

 

FrameRect(hDc, &rectangle_1,  hJaune); // Bordure du rectangle 1 en jaune

    // On colorie les autres rectangles ...
   
    FrameRect(hDc, &rectangle_2, hJaune);
    FrameRect(hDc, &rectangle_3, hJaune);
    FrameRect(hDc, &rectangle_4, hJaune);
    FrameRect(hDc, &rectangle_5, hJaune);
    FrameRect(hDc, &rectangle_6, hJaune);
    FrameRect(hDc, &rectangle_7, hJaune);
    FrameRect(hDc, &rectangle_8, hJaune);
 FrameRect(hDc, &rectangle_9, hJaune);
               DeleteObject(hJaune);         
    EndPaint(hWnd, &ps);
 break;
  }
        case WM_RBUTTONUP : // click sur le bouton droit affiche le menu -------
                            // à l'endroit du click
                            // sous forme d'une barre.
            {              
                point.x = LOWORD(lParam); // On récupère les coordonnées
                point.y = HIWORD(lParam); // de la position de la souris
                                          // au moment du click droit.
     
      

               ClientToScreen (hWnd,&point);
               
                                                                

    
                                      
               hMenuPopup = GetSubMenu(hMenu, 1);

               TrackPopupMenu( hMenuPopup,TPM_RIGHTALIGN | TPM_LEFTBUTTON,
                                             point.x,point.y,0,hWnd,NULL);
                 
                break;
            }// fin case WM_RBUTTONUP ------------------------------------------
           
           
        case WM_MENUSELECT :       
        {       
        switch (LOWORD(wParam)) // On récupère l'ID de l'option en surbrillance-
              {
                case IDM_QUITTER :// cas d'une mise en surbrillance sur l'option
                                 // quitter du menu
                {
                
                        
                SetWindowText(hWnd,"Pour sélectionner l'option cliquer dessus");
                
                
                 InvalidateRect(hWnd,NULL,TRUE);
                
                         
               
                break;    
                }
                
                default :
                {
                // on laisse (ou on remet) le texte original de légende.
                SetWindowText(hWnd,"<Morpion multijoueur>");
                InvalidateRect(hWnd,NULL,TRUE);
                }
                  
       
              } // fin switch (LOWORD(wParam))----------------------------------
        break;
        }// fin case WM_MENUSELECT ---------------------------------------------

   
        case WM_COMMAND :  // click sur les options menu (wParam contient l'ID
                           // de l'option cliquée)
       {                 
//     rappel :                          
                          
//        WM_COMMAND :  Message généré par un click sur l'une des options
//                      du menu que nous avons crée

//              LOWORD (wParam) : ID de l'option menu
//              HIWORD (wParam) : 0
//              lParam : 0
//
//             HIWORD valant 0 ; on peut au choix utiliser (DANS CE CAS) :
//                              switch (wParam)  ou
//                              switch (LOWORD (wParam))
//             Par souci de lisibilité, il me paraît judicieux d'utiliser
//             switch (LOWORD (wParam)) ...
//            
      
              switch (LOWORD(wParam)) // ---------------------------------------
              {              
                   case IDM_NOUVELLEPARTIE :  // INACTIVE ; pas d'envoi de
                                             // message WM_COMMAND.
                                             // Ce choix ne sera jamais
                                             // réalisé tant que l'option
                                             // est définie INACTIVE.
          
                   case IDM_INSTRUCTIONS :           // idem
                  
                   {                                               
                    MessageBox(hWnd,"Pour jouer le joueur 1 utilise le bouton gauche de la souris et le joueur 2 le bouton droit",
                                            "Info de service",MB_OK);
                    break;
                   } // fin case IDM_AIDE --------------------------------------
             
                
                                   
                   case IDM_QUITTER : // option menu quitter // ----------------
                   {
                   int quit = 0; // Pour récupérer la réponse de l'utilisateur.
                 
                   quit = MessageBox(hWnd,"Voulez vous réellement Quitter",
                                          szClassName,MB_YESNO|MB_ICONQUESTION);
                                           
                         if (quit == IDNO) {return 0; break;}
                               
                        // Sinon, (si quit == IDYES )...
                         SendMessage( hWnd, WM_CLOSE, 0, 0L);    
                   // ----------------------------------------------------------
                   break;   
                   } // fin case IDM_QUITTER -----------------------------------
                  
             
                
                 
                  
              } // fin switch (wParam) -----------------------------------------
                     
           break;
          
           } // fin case WM_COMMAND --------------------------------------------
           
                  
       case WM_SYSCOMMAND : // -------------------------------------------------
       
     {switch (wParam) // ---------------------------------------------
              {
                case SC_CLOSE : // cas d'un click sur la croix de fermeture
                {
                    int quit = 0;
                    quit = MessageBox(hWnd,"Voulez vous réellement Quitter?",
                                       szClassName,MB_YESNO|MB_ICONQUESTION);                                           
                         if (quit == IDNO) {return 0; break;}
                        
                 
                         SendMessage( hWnd, WM_CLOSE, 0, 0);    
               break;
    }
    // fin case SC_CLOSE ----------------------------------------
                 
                default : // on renvoie tous les autres messages système à
                          // windows selon la procédure normale.
                       
               
                {return DefWindowProc (hWnd, messages, wParam, lParam);
    }             
                 
    }// fin switch (wParam) -----------------------------------------
              
    break;} // fin case WM_SYSCOMMAND ----------------------------------
            
            
      
       case WM_CLOSE: // -------------------------------------------------------
       {
            DestroyWindow( hWnd );
            break;
       } // fin case WM_CLOSE --------------------------------------------------
      
                 
        case WM_DESTROY:
        {
            PostQuitMessage (0);            
                 
          
            
             // Destruction des pinceaux
             DeleteObject(hBlanc);      
             DeleteObject(hGris);
             DeleteObject(hJaune);  
             DeleteObject(hRouge);
                  
                        
                   
                          
             // Destruction des régions
             DeleteObject(rgnRegion_1);
             DeleteObject(rgnRegion_2);
             DeleteObject(rgnRegion_3);
             DeleteObject(rgnRegion_4);
             DeleteObject(rgnRegion_5);
             DeleteObject(rgnRegion_6);
             DeleteObject(rgnRegion_7);
             DeleteObject(rgnRegion_8);
    DeleteObject(rgnRegion_9);
                                            
            break;
           
         } // fin case WM_DESTROY ----------------------------------------------
                      
            
        default:                     
            {return DefWindowProc (hWnd, messages, wParam, lParam); }
  
}

    return 0;
}
//------------------------------------------------------------------------------
// fin du code
//------------------------------------------------------------------------------

 

 

 

mercredi 5 juillet 2006 à 14:59:42 | Re : probleme fenêtre sous windows

vincelefou

Membre Club

Salut,

 

J’ai l’impression que le problème vient de :

 

    nLarg = cxZone_Client/3;

    nHaut = cyZone_Client/3;

 

en remplaçant ces zones par :

 

    nLarg = 50;

    nHaut = 50;

 

J’obtiens un résultat (dessin de 9 rectangles)

 

PS : c’est une piste…

 

A+

Vince Le Fou !



Cette discussion est classée dans : hwnd, rectangle, define, nlarg, nhaut


Répondre à ce message

Sujets en rapport avec ce message

Probleme d affichage [ par Scythale ] Lorsque j'execute ce programme voici ce que dit mon compilateur(borland C++): you have accidentely use the old dummy version of OwlMain.Je n'arrive pa PLEAZE HELLLLLLP ! [ par kernel ] salut a tous..mon probleme est simple:- j'ai une classe nommée CForm:class CForm{public: HWND hwnd; BOOL CALLBACK DialogProcedure(HWND hWnd, UNIT ms pour le generateur nfo ca marche mais pas la. [ par Xs ] bonjours !je suis en train de me faire un logicielpour gerer ma collection de CDs mais voila : lepricipal probleme est que dans les titres, y'a bien a erreur(vc++6) [ par greg4 ] Linking...LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug/fen.exe : fatal error LNK1120: 1 unresolved externalsError execut ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation probleme de link !!! [ par NeeKotine ] Salut !je cherche a me connecter à une base MySQL via un petit programme en c dont voici le source :# include #if defined(_WIN32) || defined(_WIN64)# Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le plusieur fenetre mais une seule en mémoire... [ par Xs ] Bon, voila.Quand je fais une nouvelle fenetre avec un code ressemblant a ca : hwnd = CreateDialog(...);ShowWindow(hwnd,SW_SHOW);......bon, et bien il les tableaux et #define [ par cabarrus ] a quoi servent les tableaux [arrays] et l'instruction #define..rhumsek pb a la fermeture de win [ par stick ] bonjours,alors voilou, je fais une appli en utilisant l'api window, mais si je ferme windows sans quitter le programme auparavant, celui ci plante et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales