2016-09-30 4 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

Почему вы не ставите точку останова в строке 673 вашего файла 'C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ atlmfc \ src \ mfc \ wincore.cpp' и следуете за стеком вызовов? Сообщение довольно ясно, в каком направлении вы должны следовать! – 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()

Смежные вопросы