Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1559 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] CFileDialog et child dialog

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] CFileDialog et child dialog

n°1849527
AsTro
Posté le 10-02-2009 à 17:25:44  profilanswer
 

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 <<<<<<
mood
Publicité
Posté le 10-02-2009 à 17:25:44  profilanswer
 

n°1849544
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-02-2009 à 18:00:21  profilanswer
 

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)
n°1849554
AsTro
Posté le 10-02-2009 à 18:25:16  profilanswer
 

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 <<<<<<
n°1849733
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-02-2009 à 11:24:41  profilanswer
 

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)
n°1849854
AsTro
Posté le 11-02-2009 à 14:01:08  profilanswer
 

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 <<<<<<
n°1850167
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-02-2009 à 09:02:48  profilanswer
 

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)
n°1850394
AsTro
Posté le 12-02-2009 à 15:06:33  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC] CFileDialog et child dialog

 

Sujets relatifs
[c++ MFC] CComboBox[MFC] CAsyncMonikerFile
[MFC] Centrer un CButton...MFC C++ cammande DOS
[C++ MFC] CFileDialog n'affiche pas les disques durs[MFC] Resize d'images dans un CListCtrl
Probleme MFC DébutantAffichage dialog dans un thread
Changer le nom d'un item dans un menu (CMenu/MFC) 
Plus de sujets relatifs à : [MFC] CFileDialog et child dialog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR