begin process at 2012 05 29 21:26:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

probleme de menu


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

probleme de menu

jeudi 5 mai 2005 à 23:36:49 | probleme de menu

Stubbornman

Bonsoir a tous,

J'ai un soucis avec des menus. Je souhaite creer des fenetres filles qui ont chacune un menu. Or je n'arrive pas a afficher les menus dans ces fenetres filles...
Savez-vous pourquoi???

Voici mon code (je suis debutant... desole pour le manque de clarete) :

//
// Fichier d'implementation de l'interface

#include <windows.h>
#include "../resources/resource.h"
#include "../include/about.h"

#define IDB_NEW_RECIPE 200

// Prototypes
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ProcRecipe(HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK ProcFood(HWND, UINT, WPARAM, LPARAM) ;

// Handles
HINSTANCE hInst;
HWND  hWnd, hWndRecipe, hWndFood;  // handle sur la fenetre
HMENU  hMenu, hMenuRecipe, hMenuFood; // handle sur les menu
const  HBRUSH hCouleur_Blanche =  CreateSolidBrush(RGB(255,255,255));// handle sur un pinceau solid de couleur blanche
HBRUSH  hBackground = hCouleur_Blanche;

// Création d'une fonte pour la personnalisation des boutons et du contrôle static.
HFONT hFonte = CreateFont(15,7,0,0,FW_DONTCARE,true,false,false,DEFAULT_CHARSET ,
        OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
        DEFAULT_PITCH | FF_DONTCARE, "Arial");

// Definition des boutons
HWND hWndButtonNewRecipe;

// Definition du nom de la fenetre
static char szClassName[ ] = "Main Window";
static char szRecipe[ ] = "Recipe Window";
static char szFood[ ] = "Food Window";

// Déclaration de la structure pour compléter l'argument 11 dans les fonctions
// de créations des fenêtres enfants
CREATESTRUCT Parent;

// Fonction Winmain()
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR   lpcmdLine,
                    int    nCmdShow)

{
 hInst = hThisInstance;

 WNDCLASSEX wincl;
     wincl.hInstance     = hThisInstance;     // handle de l'instance d'application
  wincl.lpfnWndProc   = WindowProcedure;     // pointeur long sur la fonction que window  appelle pour traiter les messages destiné à l'application
  wincl.hbrBackground = hBackground;      // handle de la couleur du fond de la fenêtre
  wincl.style         = CS_HREDRAW | CS_VREDRAW;   // Spécifies le(s) style(s) de la fenêtre.
  wincl.lpszClassName = szClassName;      // pointeur long désignant le nom de la classe
  wincl.cbSize        = sizeof (WNDCLASSEX);    // spécifie la taille, en bytes, de la structure.
        wincl.hIcon         = LoadIcon (hInst, MAKEINTRESOURCE(IDI_APPICON)); // Utilise l'icone prédéfinie
  wincl.hIconSm       = LoadIcon (hInst, MAKEINTRESOURCE(IDI_APPICON)); // Utilise l'icone prédéfinie
  wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);  // Utilise le curseur standard (flêche)
  wincl.lpszMenuName  = MAKEINTRESOURCE(ID_MENU);   // Pointeur sur la ressource menu
  wincl.cbClsExtra = 0;        // Non utilisé pour l'instant
  wincl.cbWndExtra = 0;        // Non utilisé pour l'instant

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

 wincl.lpfnWndProc = ProcRecipe;
 wincl.lpszClassName = szRecipe;
 wincl.lpszMenuName  = MAKEINTRESOURCE(ID_NEW_RECIPE_MENU);

 // Enregistrement de la classe de fenêtre Recipe :
 if (RegisterClassEx(&wincl) == false)
  return NULL;

 wincl.lpfnWndProc = ProcFood;
 wincl.lpszClassName = szFood;
 wincl.lpszMenuName  = MAKEINTRESOURCE(ID_NEW_FOOD_MENU);

 // Enregistrement de la classe de fenêtre Food :
 if (RegisterClassEx(&wincl) == false)
  return NULL;


 hWnd = CreateWindowEx ( 0,     // Spécifie une extension du style de la fenêtre
       szClassName,  // Nom de la classe de fenêtre
       "Recipe Manager", // Titre apparaissant dans la barre de caption (légende)
       WS_OVERLAPPEDWINDOW,// Style de fenêtre
       CW_USEDEFAULT,  // spécifie la position initial horizontal de la fenêtre.
       CW_USEDEFAULT,  // spécifie la position initial vertical de la fenêtre.
       CW_USEDEFAULT,      // Largeur de la fenêtre en pixels
       CW_USEDEFAULT,      // Hauteur de la fenêtre en pixels
       HWND_DESKTOP,       // La fenêtre est une fenêtre enfant du bureau
       NULL,               // Pas de menu
       hThisInstance,      //  Handle de l'instance d'application
       &Parent
        );

 ShowWindow (hWnd, SW_MAXIMIZE);
 hMenu = GetMenu(hWnd);
 UpdateWindow (hWnd);

 // Affichage de la fenetre a l'ecran
 MSG messages;

 while (GetMessage (&messages, NULL, 0, 0)) // tant que pas de message WM_QUIT
    {
  TranslateMessage(&messages); // Convertit les messages concernant les frappes clavier.
  DispatchMessage(&messages);  // Envoie les messages à LRESULT CALLBACK WindowProcedure()
    }

 return messages.wParam;
}


// Fonction WindowProcedure
LRESULT CALLBACK WindowProcedure (HWND hwnd,
          UINT messages,
          WPARAM wParam,
          LPARAM lParam)
{
 POINT point;

    switch (messages)                 
    {
  case WM_CREATE :
  {
   hWndRecipe = CreateWindowEx ( NULL,
          szRecipe,
          "Creation of a new recipe slip",
          WS_CHILD | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
          200,0,600,200,
          hwnd,
          (HMENU) 300,
          hInst,
          NULL);

   hWndFood = CreateWindowEx ( NULL,
          szFood,
          "Creation of a new food slip",
          WS_CHILD | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
          200,0,600,200,
          hwnd,
          (HMENU) 301,
          hInst ,
          NULL);

   hWndButtonNewRecipe =  CreateWindowEx(NULL,
          "BUTTON",
          "New Recipe",
          WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
          10,  80, 150,  30,
          hwnd,
          (HMENU) IDB_NEW_RECIPE ,
          hInst,
          NULL );

  } // Fin traitement WM-CREATE / proc parent ---------------------------

  case WM_RBUTTONUP : // click sur le bouton droit affiche le menu -------
  {
   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); // Conversion en coordonnees ecran

            TrackPopupMenu(GetSubMenu(hMenu,0),TPM_RIGHTALIGN | TPM_LEFTBUTTON,
                                         point.x,point.y,0,hWnd,NULL);
   break;
  } // fin case WM_RBUTTONUP ------------------------------------------

  case WM_MENUSELECT : // select from menu
        {
         switch (LOWORD(wParam)) // On récupère l'ID de l'option en surbrillance-
            {
    case IDM_NEW_RECIPE : // New Recipe
    {
     SetWindowText(hWnd,"Recipe Manager: Création d'une fiche recette");
     InvalidateRect(hWnd,NULL,true);
     break;
    }

    case IDM_NEW_FOOD : // New Food
    {
     SetWindowText(hWnd,"Recipe Manager: Création d'une fiche aliment");
     InvalidateRect(hWnd,NULL,true);
     break;
    }

    case IDM_SAVE : // Save
    case IDM_SAVE_AS :
    {
     SetWindowText(hWnd,"Recipe Manager: Sauvegarde");
     InvalidateRect(hWnd,NULL,true);
     break;
    }

                case IDM_EXIT : // Quitter
                {
     SetWindowText(hWnd,"Recipe Manager: Quitter");
     InvalidateRect(hWnd,NULL,true);
     break;
    } // Fin Quitter

    case IDM_HELP : // Help
    {
     SetWindowText(hWnd,"Recipe Manager: Aide");
     InvalidateRect(hWnd,NULL,true);
     break;
    }

    case IDM_ABOUT : // A Propos
    {
     SetWindowText(hWnd,"Recipe Manager: A Propos");
     InvalidateRect(hWnd,NULL,true);
     break;
    }

    default :
                {
     SetWindowText(hWnd,"Recipe Manager");
              InvalidateRect(hWnd,NULL,TRUE);   
    }
   } // fin switch (LOWORD(wParam))----------------------------------
  break;
  } // fin case WM_MENUSELECT ---------------------------------------------

  case WM_COMMAND :  // click sur les options menu
  {
   // click sur le bouton quitter de la fenêtre parent :
   if (LOWORD(wParam) == IDB_NEW_RECIPE && HIWORD(wParam) == BN_CLICKED)
   {
    // On rend visible la fenêtre hwndRecipe :
    ShowWindow(hWndRecipe,SW_SHOW);
    hMenuRecipe = GetMenu(hWndRecipe);
    UpdateWindow (hWndRecipe);
    // On masque les CheckBox permettant de creer la fenetre hwndRecipe :
    ShowWindow(hWndButtonNewRecipe,SW_HIDE);
    return 0;
   }

   switch (LOWORD(wParam)) // -----------------------------------------------
   {
    case IDM_NEW_RECIPE :
    {
     // On rend visible la fenêtre hwndRecipe :
     ShowWindow(hWndRecipe,SW_SHOW);
     hMenuFood = GetMenu(hWndFood);
     UpdateWindow (hWndFood);
     ShowWindow(hWndButtonNewRecipe,SW_HIDE);
     return 0;
    }

    case IDM_NEW_FOOD :
    {
     // On rend visible la fenêtre hwndFood :
     ShowWindow(hWndFood,SW_SHOW);
     ShowWindow(hWndButtonNewRecipe,SW_HIDE);
     return 0;
    }

    case IDM_SAVE :

    case IDM_HELP :

    case IDM_SAVE_AS : // option menu Save As // ----------------
    {
     MessageBox(hWnd,"Cette fonction n'est pas implémentée",
                                          "Info de service",MB_OK);
                    break;
    } // Fin SAVE AS

                case IDM_EXIT : // option menu Quitter // ----------------
    {
     int quit = false;

     quit =  MessageBox(hWnd,"Vous voulez réellement Quitter",
           szClassName,MB_YESNO|MB_ICONQUESTION);

     if (quit == IDNO) {return 0; break;}
     SendMessage( hWnd, WM_CLOSE, 0, 0L);
     break;
    } // Fin Quitter

    case IDM_ABOUT : // option menu A Propos  -----------------
                {          
     return aboutCreate(hWnd, hInst);
     break;
                } // Fin A PROPOS -----------------------------------
   } // Fin switch (LOWORD (wParam)) ----------------------------------------- 
   
   break;
  } // Fin WM_COMMAND -------------------------------------------------------

  case WM_SYSCOMMAND : // -------------------------------------------------
  {
            switch (LOWORD (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, 0L);    
                } // 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);
     break;
    }
   } // Fin switch (LOWORD (wParam)) -----------------------------------------
              
            break; // Fin case WM_SYSCOMMAND ----------------------------------
  }

  case WM_CLOSE: // -------------------------------------------------------
  {
   DestroyMenu(hMenu);
   DestroyWindow(hWnd);
   break;
  } // fin case WM_CLOSE --------------------------------------------------
      
 
  case WM_DESTROY: // -------------------------------------------------------
  {
   PostQuitMessage (0);       // envoie un message WM_QUIT dans la file d'attente
   break;
  } // fin case WM_DESTROY --------------------------------------------------

  default:                      // Tout les autres messages sont renvoyé à windows. avec les paramètres wParam et lParam
   return DefWindowProc (hwnd, messages, wParam, lParam);
    }
    return 0;
}


LRESULT CALLBACK ProcRecipe(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)

    {
  case WM_SYSCOMMAND :

   switch(LOWORD(wParam))

   {
    case SC_CLOSE :
     ShowWindow(hWndRecipe,SW_HIDE);
     // On remet les boutons de la fenêtre parents "actifs"
     EnableWindow(hWndButtonNewRecipe,true);
     return 0;

    default :
     return DefWindowProc(hWnd,message,wParam,lParam);

   }
  return 0;


 }
 return DefWindowProc(hWnd,message,wParam,lParam);

}// Fin de la procédure de traitement des messages de la fenêtre enfant 1 -----


LRESULT CALLBACK ProcFood(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)

    {
  case WM_SYSCOMMAND :

   switch(LOWORD(wParam))

   {
    case SC_CLOSE :
     ShowWindow(hWndFood,SW_HIDE);
     // On remet les boutons de la fenêtre parents "actifs"
     EnableWindow(hWndButtonNewRecipe,true);
     return 0;

    default :
     return DefWindowProc(hWnd,message,wParam,lParam);

   }
  return 0;


 }
 return DefWindowProc(hWnd,message,wParam,lParam);
}

Merci de votre aide.



Cette discussion est classée dans : case, wincl, hwnd, wparam, return


Répondre à ce message

Sujets en rapport avec ce message

PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ] bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe pb affichage ComboBox dans Dialog [ par Guillemouze ] Salut tout le monde,j'ai un souci d'affichage de mon combo dans un dialog. Quand je click sur la fleche pour afficher la liste, il ne m'affiche rien!P Fenetre windows en cpp [ par FeelCode ] bon j'essaye de cree une fenetre windows tout simple mai j'ai un probleme de convertion voir le code plus bas.//************************************** Dialog fenetre enfant qui bloque [ par NairodDorian ] Bonjour,Mon probleme est le suivant, j'utilises les resources avec des dialog et je voudrai affiche un dialogue defini par Child dans les proprietes d petit problème de saisie [ par snpier wolf ] Bonjours ou bon soir à tous,voila j'ais fait un bou de code en win32 et il marche.il marche ?non.il y a un petit  truc qui ne marche pas, quand je m'e probleme pour mon petit carré [ par mortaurat ] bonjour alors je debute en C et je veux faire mon petit carré .donc j'ai commancé par initialiser une fenetre opengl ce qui donne :#include LRESULT C Creer un controle standard API Win32 [ par Kazuya ] Bojour,Alors voila, j'essaie de me mettre aux API win32 et la j'ai un petit probleme, lorsque j'affiche un controle dans ma feuille principale, il sci Problème de linker dans programme de base. [ par vith17 ] Bonjour,J'ai tapé le code suivant sous Dev-C++. Lorsque je lance la compilation, il me revoie l'erreur suivante :    [Linker error] undefined referenc Problème windowproc dans une class [ par Mr.X ] Alors voila enfait j'aimerai utiliser un Windowproc dans une class Exemple : class CClass{ public :         LRESULT CALLBACK WProc(HWND, UINT, WPARA Help Au secours [ par NAVIE ] Bonjour, j'écris ce message pour un problème que j'ai avec un de mes programmes. Je compile avec DevCpp Version 4.9.9.2 et j'ai crée deux fichiers sou


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 3,947 sec (3)

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