1

CDialogクラスから継承するCStdDlgがあります。CStdDlgダイアログには、リストボックス(m_lcList1)、編集ボックス(m_ceEdit1)、ラジオボタン(m_rbButton2)、および[OK]、[キャンセル]、[Button1]のボタンがあります。

CStdDlgから継承するCDerivedDlgという名前の別のクラスを作成しようとしています。CStdDlgですべてを使用したいのですが、CDerivedDlgからのものです。これはここではばかげたテストアプリケーションですが、実際のアプリケーションとまったく同じようなものが必要です。

以下にすべてのコードを示します。問題:リストボックスに列ヘッダーを追加しようとすると、問題が発生し続けます。m_hWnd = NULL

誰かが私に何が悪いのか教えてもらえますか?本当にありがたいです。ありがとうございました。

// CStdDlg.cpp file

#include "stdafx.h"  
#include "testdlg.h"
#include "StdDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CStdDlg dialog
CStdDlg::CStdDlg(UINT nIDTemplate, CWnd* pParent /*=NULL*/)
    : CDialog(CStdDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CStdDlg)
    //}}AFX_DATA_INIT
}
void CStdDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CStdDlg)
    DDX_Control(pDX, IDC_EDIT1, m_ceEdit1);
    DDX_Control(pDX, IDC_RADIO2, m_rbButton2);
    DDX_Control(pDX, IDC_LIST1, m_lcList1);
    //}}AFX_DATA_MAP
}
IMPLEMENT_DYNAMIC(CStdDlg, CDialog)
BEGIN_MESSAGE_MAP(CStdDlg, CDialog)
    //{{AFX_MSG_MAP(CStdDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStdDlg message handlers
BOOL CStdDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();

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

//CStdDlg.h file

#if !defined(AFX_STDDLG_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_)
#define AFX_STDDLG_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// StdDlg.h : header file
//
#include <afxwin.h>

/////////////////////////////////////////////////////////////////////////////
// CStdDlg dialog

class CStdDlg : public CDialog
{
    DECLARE_DYNAMIC(CStdDlg)
// Construction
public:

    CStdDlg(UINT nIDTemplate,CWnd* pParent = NULL);   // standard constructor
    CString GetTitle() { 
        CString csTTL;
        GetWindowText(csTTL);
        return csTTL;
    }
// Dialog Data
    //{{AFX_DATA(CStdDlg)
    enum { IDD = IDD_STDDLG };
    CEdit   m_ceEdit1;
    CButton m_rbButton2;
    CListCtrl   m_lcList1;
    //}}AFX_DATA


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

// Implementation
protected:
    void ShowMsg() { AfxMessageBox("ShowMsg from StdDlg"); }
    // Generated message map functions
    //{{AFX_MSG(CStdDlg)
    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_STDDLG_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_)

===================================================================================
//CDerivedDlg.cpp file

// StdDlg.cpp : implementation file
//

#include "stdafx.h"
#include "testdlg.h"
#include "CDerivedDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDerivedDlg dialog


CDerivedDlg::CDerivedDlg(CWnd* pParent /*=NULL*/)
    : CStdDlg(CDerivedDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CDerivedDlg)
    //}}AFX_DATA_INIT
}


void CDerivedDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CDerivedDlg)
    //}}AFX_DATA_MAP
}


IMPLEMENT_DYNAMIC(CDerivedDlg, CStdDlg)
BEGIN_MESSAGE_MAP(CDerivedDlg, CStdDlg)
    //{{AFX_MSG_MAP(CDerivedDlg)
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDerivedDlg message handlers


//void CDerivedDlg::OnOK() 
//{
//  // TODO: Add extra validation here
//  AfxMessageBox("CDerived Class OK button pressed");
//  CDialog::OnOK();
//}

BOOL CDerivedDlg::OnInitDialog() 
{
    CStdDlg::OnInitDialog();
    SetWindowText("Derived Test Window");
    m_lcList1.InsertColumn(0,"This is a test");    *******THIS IS WHERE IT CRASHES*****


    m_rbButton2.ShowWindow(SW_HIDE);
    m_ceEdit1.ShowWindow(SW_HIDE);



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


void CDerivedDlg::OnButton1() 
{
//  // TODO: Add extra validation here
    AfxMessageBox("CDerived Button1 pressed");
    AfxMessageBox(GetTitle());

}

void CDerivedDlg::OnOK() 
{
    AfxMessageBox("CDerived Class OK button pressed");

}
===================================================================================
// CDerivedDlg.h file

#if !defined(AFX_CDerivedDlg_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_)
#define AFX_CDerivedDlg_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CDerivedDlg.h : header file
//
#include "StdDlg.h"

/////////////////////////////////////////////////////////////////////////////
// CDerivedDlg dialog

class CDerivedDlg : public CStdDlg
{
    DECLARE_DYNAMIC(CDerivedDlg)
// Construction
public:
    CDerivedDlg(CWnd* pParent = NULL);   // standard constructor
    virtual void SetTTL(CString csTitle) { this->SetWindowText(csTitle); }

// Dialog Data
    //{{AFX_DATA(CDerivedDlg)
    enum { IDD = IDD_STDDLG };
    //}}AFX_DATA


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

// Implementation
protected:

    // Generated message map functions
    //{{AFX_MSG(CDerivedDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnButton1();
    virtual void OnOK();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

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

#endif // !defined(AFX_CDerivedDlg_H__CDAFF61F_91AB_4B47_9970_6B8BB5DE0003__INCLUDED_)
===================================================================================
4

2 に答える 2

1

DDX_Control()は基本クラスにあるため、派生クラスはリソースコントロールをそれぞれのクラスにリンクしないと思います。これを変更してみてください。

void CDerivedDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);

これに:

void CDerivedDlg::DoDataExchange(CDataExchange* pDX)
{
    CStdDlg::DoDataExchange(pDX);
于 2009-10-15T18:20:18.977 に答える
0
m_lcList1.InsertColumn(0,"This is a test");    *******THIS IS WHERE IT CRASHES*****

コントロールを使用するには、コントロールを作成する必要があります。CListCtrl::Createおよび/またはCListCtrl::CreateExメソッド
を参照してください。リストをレポートビューコントロールとして使用するため、スタイル を選択する必要があります。
LVS_REPORT

于 2009-10-15T18:19:40.303 に答える