Menu dans dialogbox [Résolu]

cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 00:36 - Dernière réponse : cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention
- 19 juil. 2005 à 22:43
Bonjour,
Voila, je cherche à mettre un menu dans ma dialog box du type Fichier Edition ...
J'ai vu des exemples sur codes sources mais c'était sur des fenetres normales et non des dialog box.
J'aimerai donc savoir si c'est le même code pour un menu dans une dialog box ou si c'est un code différent ?
Je travaille sous Dev C++ mais les exemples étaient faits sous VS C++. Est ce que la syntaxe est différente dans le fichier ressource .rc ou dans le code ?
Etant débutant en Win32, j'ai un peu de mal à m'y faire (mais j'espère que ça viendra).
Merci pour vos futures réponses.
@++
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 19 juil. 2005 à 12:38
3
Merci
LoadMenu() et SetMenu() par exemple.
Va sans dire que pour une dialog, il est nettement préférable et plus rapide en chargement de passer par une ressource en rc.

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 82 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 19 juil. 2005 à 19:24
3
Merci
Bé tu donnes la main à ta dialogbox avec DialogBox( )...

Tu traites les messages avec une procédure du type : LRESULT CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM);



et donc dans le message WM_INITDIALOG:

tu fais un HMENU hMenu = LoadMenu( hInst, MAKEINTRESOURCE(IDM_MENU));

apres tu testes, si marches, tu fais un SetMenu(hWnd, hMenu);

et tu retournes 1 pke c WM_INITDIALOG

void Aurevoir( void ); //Bonne journée

Merci cs_Joky 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Joky
Meilleure réponse
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 20:25
3
Merci
Erreur trouvée !
C'est :
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:/Dev-C++/Icon/MAINICON.ICO"
#include "ressource.h"
IDM_MENU MENU
{
POPUP "File"
{
MENUITEM "Open...", CM_FILE_OPEN
MENUITEM "Save As...", CM_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "Exit", CM_FILE_EXIT
}


POPUP "Help"
{
MENUITEM "&About", CM_ABOUT
}


}
et non :
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:/Dev-C++/Icon/MAINICON.ICO"
#include "ressource.h"


IDM_MENU MENU
{
POPUP "&File"
{
MENUITEM "&Open...", CM_FILE_OPEN
MENUITEM "Save &As...", CM_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "E&xit", CM_FILE_EXIT
}


POPUP "&Help"
{
MENUITEM "&About", CM_ABOUT
}


}
Merci beaucoup à tous.
@++

Merci cs_algori 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_algori
Meilleure réponse
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 19 juil. 2005 à 22:26
3
Merci
Et juste un reproche de ma réponse, quand on charge depuis les ressources, pas besoin de l'instance

donc LoadMenu(NULL, MAKEINTRESOURCE(IDR_MENU));

C'est exactement pareil :)

void Aurevoir( void ); //Bonne journée

Merci cs_Joky 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Joky
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 19 juil. 2005 à 08:46
0
Merci
Je ne sais pas comment tu vas pouvoir faire avec Dev-C++, mais pour ajouter un menu à une dialog box, il te suffit de créer un menu et de le notifier dans la propriété 'Menu' de ta dialog.

+2(p - n)
Commenter la réponse de cs_AlexMAN
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 13:16
0
Merci
Bien sûr c'est ce que je vais faire.
Commenter la réponse de cs_algori
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 19 juil. 2005 à 16:38
0
Merci
C'est sur que faire des Menu avec DevC++ c'est po facile lol

Télécharge ResHacker et regarde des exemples de Menu ça aide bien beaucoup :)

void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 18:15
0
Merci
Salut Joky,
Peux-tu me donner le lien de ResHacker ?
Merci sinon.
@++
Commenter la réponse de cs_algori
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 18:59
0
Merci
Bon, ok pour ResHacker. Mais le seul truc qui me dérange, c'est que je ne sais pas comment l'écrire dans le code. Je dois m'y prendre comme un pied mais c'est pour le code que je bloque (je sais comme l'a dit Brunews qu'il faut utiliser LoadMenu et SetMenu mais je ne trouve des exemples que pour des fenetres classiques et pas des dialog box. Peut être avez vous des exemples de menus dans des dialogbox avec Dev C++). Sinon, pas le choix, je me rabattrai sur des fenetres classiques.
@++
Commenter la réponse de cs_algori
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 20:17
0
Merci
Voici le code, ça va être plus simple :
dans fenetre.cpp :
#include <windows.h>
#include "ressource.h"

HINSTANCE hInst;


BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam,LPARAM lParam)
{


switch (message)
{
case WM_INITDIALOG:
{
HMENU hMenu = LoadMenu( hInst, MAKEINTRESOURCE(IDM_MENU));
SetMenu(hDlg, hMenu);
return 1;
}



case WM_COMMAND:// Action sur l'un des controles
{
break;
}


case WM_CLOSE:
{
EndDialog(hDlg,0);
return 1;
}


default:
break;
}


return 0;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{


hInst = hInstance;


LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);


if (!lpdt) return 1;


lpdt->style = DS_CENTER | WS_POPUP | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | WS_MINIMIZEBOX; lpdt->x lpdt->y 0; lpdt->cx = 313; lpdt->cy = 180;


DialogBoxIndirect(hInstance,lpdt,NULL,(DLGPROC)DialogProc);


GlobalFree((HGLOBAL)lpdt);


return 0;
}

dans ressource.h :
#define CM_FILE_SAVEAS 100
#define CM_FILE_EXIT 101
#define CM_FILE_OPEN 102
#define CM_ABOUT 103
#define IDM_MENU 200 //j'étais obligé de le définir car une erreur apparaissait sinon

dans rsrc.rc :
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:/Dev-C++/Icon/MAINICON.ICO"
#include "ressource.h"


IDM_MENU MENU
{
POPUP "&File"
{
MENUITEM "&Open...", CM_FILE_OPEN
MENUITEM "Save &As...", CM_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "E&xit", CM_FILE_EXIT
}


POPUP "&Help"
{
MENUITEM "&About", CM_ABOUT
}


}

Voila ! Peut être qu'il y a une erreur où un oubli ???
@++
Commenter la réponse de cs_algori
cs_algori 870 Messages postés dimanche 26 décembre 2004Date d'inscription 26 février 2008 Dernière intervention - 19 juil. 2005 à 22:43
0
Merci
Ok, merci beaucoup !
@++
Commenter la réponse de cs_algori

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.