简体   繁体   中英

MFC SDI Create button dynamically

I am trying to create a button dynamically. I have read some other resource and make the following code:

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
}

I can make a button successfully when I start the MFC application. The problem is that when I try to open a new document by clicking:
在此处输入图片说明
I get an error and my app crashed at m_Button.Create(_T("Rearrange"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 128, 32), this, MYBUTTONID);
在此处输入图片说明

I solved the problem with the following code:

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
}

May be the problem is I should not re-create the window inside the OnInitialUpdate()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM