2016-09-30 67 views
0

我正在尝试动态创建一个按钮。我看过一些其他资源,使下面的代码:
MFC SDI动态创建按钮

BEGIN_MESSAGE_MAP(Cdynamic_button_sdiView, CView) 
    // Standard printing commands 
    ON_BN_CLICKED(MYBUTTONID, OnMyBN_Click) 
END_MESSAGE_MAP() 
void Cdynamic_button_sdiView::OnInitialUpdate() 
{ 
    CView::OnInitialUpdate(); 
    m_Button.Create(_T("Rearrange"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 128, 32), this, MYBUTTONID); // here will create a button 
} 

我可以做一个按钮成功当我开始MFC应用程序。问题是,当我尝试通过单击打开一个新的文档:
enter image description here
我得到一个错误,我的应用程序在m_Button.Create(_T("Rearrange"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 128, 32), this, MYBUTTONID);
enter image description here

+0

上有这种说法3个按钮里面的窗对话。其中一个会泄露大量有用的信息,包括代码未能满足的先决条件。 – IInspectable

+0

为什么不在C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ atlmfc \ src \ mfc \ wincore.cpp'文件的第673行中放置断点并遵循Call Stack?这个信息非常清楚你应该遵循什么方向! – sergiol

+0

虽然我怀疑你的代码有什么问题,但我不会告诉你,因为我希望你能对它进行调试!几年后,你会看到好处。 – sergiol

回答

0

坠毁我解决了用下面的代码的问题:

Cdynamic_button_sdiView::Cdynamic_button_sdiView() 
{ 
    // TODO: add construction code here 
    m_Button = NULL; 
} 

Cdynamic_button_sdiView::~Cdynamic_button_sdiView() 
{ 
    if (m_Button != NULL) 
     delete m_Button; 
} 
void Cdynamic_button_sdiView::OnInitialUpdate() 
{ 
    CView::OnInitialUpdate(); 

    if (m_Button != NULL) 
     delete m_Button; 

    m_Button = new CButton; 
    m_Button->Create(_T("Rearrange"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 128, 32), this, MYBUTTONID); // here will create a button 
} 

可能是问题是我不应该重新创建的OnInitialUpdate()