Menu dans dialogbox

Résolu
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 - 19 juil. 2005 à 00:36
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 - 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.
@++

11 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juil. 2005 à 12:38
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++
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 juil. 2005 à 19:24
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
3
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 20:25
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.
@++
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 juil. 2005 à 22:26
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
3

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

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 juil. 2005 à 08:46
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)
0
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 13:16
Bien sûr c'est ce que je vais faire.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 juil. 2005 à 16:38
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
0
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 18:15
Salut Joky,
Peux-tu me donner le lien de ResHacker ?
Merci sinon.
@++
0
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 18:59
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.
@++
0
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 20:17
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 ???
@++
0
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
19 juil. 2005 à 22:43
Ok, merci beaucoup !
@++
0
Rejoignez-nous