Visual C++ 6.0 - OnInitDialog in einer Abgeleiteten CDialog-Klasse funktioniert nicht

Habe ich erstellen Sie eine einfache MFC-Anwendungs-Assistent-Dialogfeld Projekt. Ich benutzte Sie den Klassen-Assistenten zum erstellen einer neuen Klasse namens CMyDlg basierend auf CDialog. Dann ging ich zu der Message, screen-und doubleclicked auf die WM_INITDIALOG-Eintrag automatisch erstellen CMyDlg::OnInitDialog () - handler.

Das problem, das ich habe, ist, dass CMyDlg::OnInitDialog() nicht nennen werde. Ich habe einen Haltepunkt in es und will es einfach nicht nennen. Das übergeordnete Dialogfeld OnInitDialog () - Methode aufgerufen wird, aber es wird nicht rufen Sie die CMyDlg::OnInitDialog () - Methode.

Ist es etwas besonderes als muss getan werden?

Ich habe es geschafft, eine Problemumgehung implementieren, die eine Nachricht zu senden, von meinem eigenen aus den übergeordneten dialog OnInitDialog () - Methode und haben es behandelt in CMyDlg aber.. ich bin mir sicher, dies ist nicht der Weg, es zu tun..

//MyDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DeriveDlgTest.h"
#include "MyDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
//CMyDlg dialog

CMyDlg::CMyDlg( UINT nIDTemplate, CWnd* pParent /*=NULL*/)
    : CDialog(nIDTemplate, pParent)
{
  //PDS: THIS GETS CALLED
}

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMyDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CMyDlg)
        //NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}


void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMyDlg)
        //NOTE: the ClassWizard will add DDX and DDV calls here
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
    //{{AFX_MSG_MAP(CMyDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//CMyDlg message handlers

BOOL CMyDlg::OnInitDialog() 
{
  //PDS: THIS DOES NOT GET CALLED
    CDialog::OnInitDialog();


    return TRUE;  //return TRUE unless you set the focus to a control
                  //EXCEPTION: OCX Property Pages should return FALSE
}


#if !defined(AFX_MYDLG_H__ECC7F6AC_FEB3_419D_AFE2_6B6DE8196D74__INCLUDED_)
#define AFX_MYDLG_H__ECC7F6AC_FEB3_419D_AFE2_6B6DE8196D74__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif //_MSC_VER > 1000
//MyDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
//CMyDlg dialog

class CMyDlg : public CDialog
{
//Construction
public:
    CMyDlg(CWnd* pParent = NULL);   //standard constructor
  CMyDlg( UINT nIDTemplate, CWnd* pParent = NULL);   //standard constructor
//Dialog Data
    //{{AFX_DATA(CMyDlg)
    enum { IDD = IDD_DERIVEDLGTEST_DIALOG };
        //NOTE: the ClassWizard will add data members here
    //}}AFX_DATA


//Overrides
    //ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMyDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    //DDX/DDV support
    //}}AFX_VIRTUAL

//Implementation
protected:

    //Generated message map functions
    //{{AFX_MSG(CMyDlg)
    virtual BOOL OnInitDialog();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
//Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif //!defined(AFX_MYDLG_H__ECC7F6AC_FEB3_419D_AFE2_6B6DE8196D74__INCLUDED_)

Danke Jungs. Ich habe hochgeladen, die dummy-Projektes auf den link unten. Versuchen Sie das Projekt zu erstellen und Sie werden feststellen, dass CMyDlg::OnInitDialog() wird nie aufgerufen.

Entfernte ich die IDD enum und Konstruktor wie hingewiesen, oben, aber es machte keinen Unterschied überhaupt. Es ist nicht CMyDlg dlg; dlg.DoModal () - Aufruf als Haupt-dialog selbst es abgeleitet von CMyDlg im Gegensatz zu den üblichen CDialog-Klasse.

Habe ich noch nicht, hat dieses Problem gelöst, so dass jede Hilfe wäre sehr geschätzt.

Cheers

link-text

  • Wie werden Sie versuchen, um Ihre CMyDlg Instanz?
  • Hallo Meilen. Ich begann mit einem einfachen dialog-app (eine, die der Assistent für Sie tut und zeigt ein statisches label, einem OK-und Abbrechen-button). Ich habe dann geändert, so dass statt, wenn die Unterklassen der CDialog-Klasse, es Unterklassen CMyDlg statt. Cheers
  • Vermutlich haben Sie einige code, der aussieht wie CMyDlg myDlg; myDlg.DoModal();? Können wir sehen, dass der code?
InformationsquelleAutor SparkyNZ | 2009-11-10
Schreibe einen Kommentar