Menu dans dialogbox

Résolu
Signaler
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
-
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
-
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.
@++

11 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
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.
@++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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)
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
Bien sûr c'est ce que je vais faire.
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
Salut Joky,
Peux-tu me donner le lien de ResHacker ?
Merci sinon.
@++
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
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.
@++
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
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 ???
@++
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
Ok, merci beaucoup !
@++