[MFC] CFileDialog et child dialog

CFileDialog et child dialog [MFC] - C++ - Programmation

Marsh Posté le 10-02-2009 à 17:25:44    

Salut,
 
J'essai de faire une application basée sur une CFileDialog. J'arrive à la créer dans ma fenêtre fille, de ce côté là pas de problème. Mais j'amerais également avoir un menu dans mon appli.
Je fais donc ceci pour ajouter le menu :

Code :
  1. CMenu *menu = new CMenu;
  2. menu->LoadMenu(IDR_MENU);
  3. GetParent()->SetMenu(menu);    // ajoute le menu dans la classe parent CFileDialog


 
Le menu s'affiche correctement mais je n'arrive à récupérer aucun message quand je clique dans le menu.
Dans ma classe j'ai bien :

Code :
  1. ON_COMMAND(ID_FILE_QUIT, &CFileDlgCustom::OnFileQuit)


 
Quelqu'un à une idée de comment faire?


Message édité par AsTro le 10-02-2009 à 17:30:28

---------------
>>>>>> WebFotos <<<<<<
Reply

Marsh Posté le 10-02-2009 à 17:25:44   

Reply

Marsh Posté le 10-02-2009 à 18:00:21    

tu peux poster l'intégralité de ton code, il y a trop peu d'infos là


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-02-2009 à 18:25:16    

Harkonnen a écrit :

tu peux poster l'intégralité de ton code, il y a trop peu d'infos là


En fait là tu as tout le code quasiment. J'ai refais un projet vide pour tester que ça ne venait pas d'autre chose.
J'ai donc un nouveau projet mfc boite de dialogue qui dérive de CDialog. Ensuite je modifie le CDialog par CFileDialog et j'ajoute ce code dans le constructeur :

Code :
  1. m_ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ALLOWMULTISELECT;
  2. m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD);
  3. m_ofn.FlagsEx |= OFN_EX_NOPLACESBAR;


 
Ensuite je créer un menu que j'ajoute dans le initdialog:

Code :
  1. CMenu *menu = new CMenu;
  2. menu->LoadMenu(IDR_MENU1);
  3. GetParent()->SetMenu(menu);


 
Et j'ajoute un event handler de type command sur un item du menu (File>Quit) :

Code :
  1. ON_COMMAND(ID_FILE_QUIT, &CFromFileDlg::OnFileQuit)
  2. void CFromFileDlg::OnFileQuit();


 
Voici le fichier complet mais y'a rien de plus de modifié:

Code :
  1. // FromFileDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "FromFile.h"
  5. #include "FromFileDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // CAboutDlg dialog used for App About
  10. class CAboutDlg : public CDialog
  11. {
  12. public:
  13. CAboutDlg();
  14. // Dialog Data
  15. enum { IDD = IDD_ABOUTBOX };
  16. protected:
  17. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  18. // Implementation
  19. protected:
  20. DECLARE_MESSAGE_MAP()
  21. };
  22. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  23. {
  24. }
  25. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. }
  29. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  30. END_MESSAGE_MAP()
  31. // CFromFileDlg dialog
  32. CFromFileDlg::CFromFileDlg(CWnd* pParent /*=NULL*/)
  33. : CFileDialog(TRUE)
  34. {
  35. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  36. m_ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ALLOWMULTISELECT;
  37. m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD);
  38. m_ofn.FlagsEx |= OFN_EX_NOPLACESBAR;
  39. }
  40. void CFromFileDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CFileDialog::DoDataExchange(pDX);
  43. }
  44. BEGIN_MESSAGE_MAP(CFromFileDlg, CFileDialog)
  45. ON_WM_SYSCOMMAND()
  46. ON_WM_PAINT()
  47. ON_WM_QUERYDRAGICON()
  48. //}}AFX_MSG_MAP
  49. ON_COMMAND(ID_FILE_QUIT, &CFromFileDlg::OnFileQuit)
  50. END_MESSAGE_MAP()
  51. // CFromFileDlg message handlers
  52. BOOL CFromFileDlg::OnInitDialog()
  53. {
  54. CFileDialog::OnInitDialog();
  55. // Add "About..." menu item to system menu.
  56. // IDM_ABOUTBOX must be in the system command range.
  57. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  58. ASSERT(IDM_ABOUTBOX < 0xF000);
  59. CMenu* pSysMenu = GetSystemMenu(FALSE);
  60. if (pSysMenu != NULL)
  61. {
  62.  CString strAboutMenu;
  63.  strAboutMenu.LoadString(IDS_ABOUTBOX);
  64.  if (!strAboutMenu.IsEmpty())
  65.  {
  66.   pSysMenu->AppendMenu(MF_SEPARATOR);
  67.   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  68.  }
  69. }
  70. // Set the icon for this dialog.  The framework does this automatically
  71. //  when the application's main window is not a dialog
  72. SetIcon(m_hIcon, TRUE);   // Set big icon
  73. SetIcon(m_hIcon, FALSE);  // Set small icon
  74. CMenu *menu = new CMenu;
  75. menu->LoadMenu(IDR_MENU1);
  76. GetParent()->SetMenu(menu);
  77. return TRUE// return TRUE  unless you set the focus to a control
  78. }
  79. void CFromFileDlg::OnSysCommand(UINT nID, LPARAM lParam)
  80. {
  81. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  82. {
  83.  CAboutDlg dlgAbout;
  84.  dlgAbout.DoModal();
  85. }
  86. else
  87. {
  88.  CFileDialog::OnSysCommand(nID, lParam);
  89. }
  90. }
  91. // If you add a minimize button to your dialog, you will need the code below
  92. //  to draw the icon.  For MFC applications using the document/view model,
  93. //  this is automatically done for you by the framework.
  94. void CFromFileDlg::OnPaint()
  95. {
  96. if (IsIconic())
  97. {
  98.  CPaintDC dc(this); // device context for painting
  99.  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  100.  // Center icon in client rectangle
  101.  int cxIcon = GetSystemMetrics(SM_CXICON);
  102.  int cyIcon = GetSystemMetrics(SM_CYICON);
  103.  CRect rect;
  104.  GetClientRect(&rect);
  105.  int x = (rect.Width() - cxIcon + 1) / 2;
  106.  int y = (rect.Height() - cyIcon + 1) / 2;
  107.  // Draw the icon
  108.  dc.DrawIcon(x, y, m_hIcon);
  109. }
  110. else
  111. {
  112.  CFileDialog::OnPaint();
  113. }
  114. }
  115. // The system calls this function to obtain the cursor to display while the user drags
  116. //  the minimized window.
  117. HCURSOR CFromFileDlg::OnQueryDragIcon()
  118. {
  119. return static_cast<HCURSOR>(m_hIcon);
  120. }
  121. void CFromFileDlg::OnFileQuit()
  122. {
  123. // La fonction ou je ne passe jamais
  124. }


Message édité par AsTro le 11-02-2009 à 00:52:20

---------------
>>>>>> WebFotos <<<<<<
Reply

Marsh Posté le 11-02-2009 à 11:24:41    

Le message ID_FILE_QUIT est il associé à l'entrée correspondante de ton menu ? Parce que dans ta MESSAGE_MAP tu affectes bien ce message au handler correspondant, mais es tu sur que ce message est correctement déclenché par l'action de menu correspondante ? (voir dans le fichier .rc, tu dois avoir une ligne pour ton menu genre  
 

Citation :


MENUITEM "&Quit\tAlt+F4", ID_FILE_QUIT


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-02-2009 à 14:01:08    

Harkonnen a écrit :

Le message ID_FILE_QUIT est il associé à l'entrée correspondante de ton menu ? Parce que dans ta MESSAGE_MAP tu affectes bien ce message au handler correspondant, mais es tu sur que ce message est correctement déclenché par l'action de menu correspondante ? (voir dans le fichier .rc, tu dois avoir une ligne pour ton menu genre  
 

Citation :


MENUITEM "&Quit\tAlt+F4", ID_FILE_QUIT



 
Oui c'est correctement associé.


---------------
>>>>>> WebFotos <<<<<<
Reply

Marsh Posté le 12-02-2009 à 09:02:48    

tu peux poster la définition de IDR_MENU1 qui est présente dans ton fichier de ressources ? (.rc)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-02-2009 à 15:06:33    

IDR_MENU1 MENU  
BEGIN
    POPUP "File"
    BEGIN
        MENUITEM "Quit",                        ID_FILE_QUIT
    END
END


---------------
>>>>>> WebFotos <<<<<<
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed