Создание производного элемента управления CWnd во время выполнения

Я пытаюсь создать CWnd производный класс во время выполнения, но CWnd::Create выходит из строя. Понятия не имею почему. Вот минимальный код, который показывает проблему:

MFCTestApplicationDlg.h

#pragma once

class c_CustomButton : public CButton
{
protected:
    DECLARE_MESSAGE_MAP()

    virtual void PreSubclassWindow();

public:
    c_CustomButton();
    virtual ~c_CustomButton();
};


class TestWindow : public CWnd
{
public:
    TestWindow();
    virtual ~TestWindow();

protected:
    DECLARE_MESSAGE_MAP()
    DECLARE_DYNCREATE(TestWindow)  
};

// CMFCTestApplicationDlg dialog
class CMFCTestApplicationDlg : public CDialogEx
{
...
}

MFCTestApplicationDlg.cpp

//

#include "stdafx.h"
#include "MFCTestApplication.h"
#include "MFCTestApplicationDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

/*==========================================================================*/
c_CustomButton::c_CustomButton()
{
}

/*==========================================================================*/
c_CustomButton::~c_CustomButton()
{
}

BEGIN_MESSAGE_MAP(c_CustomButton, CButton)
END_MESSAGE_MAP()

/*==========================================================================*/
void c_CustomButton::PreSubclassWindow()
{
    CButton::PreSubclassWindow();

    ModifyStyle(0, BS_OWNERDRAW);
}

IMPLEMENT_DYNAMIC(TestWindow, CWnd)

TestWindow::TestWindow()
{

}

TestWindow::~TestWindow()
{
}


BEGIN_MESSAGE_MAP(TestWindow, CWnd)
END_MESSAGE_MAP()

void CMFCTestApplicationDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);

    c_CustomButton* pColoredButton = new c_CustomButton;
    pColoredButton->Create((LPCTSTR)"", 0, CRect(), this, 0);// successeded
    pColoredButton->SetWindowTextW((LPCTSTR)"test");

    TestWindow* pTestWindow = new TestWindow;
    pTestWindow->Create((LPCTSTR)"TestWindow", (LPCTSTR)"TestWindowName", 0, CRect(), this, 0);// failed
    pTestWindow->SetWindowText((LPCTSTR)"test");
}

В void CMFCTestApplicationDlg::DoDataExchange(CDataExchange* pDX) Я пытался создать CButton производный объект класса и CWnd производный класс объекта. Первый успешно создан, но CWnd производный объект класса не удается создать. Что не так с этим кодом?

0 ответов

Другие вопросы по тегам