Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Корректное открытие и закрытие немодалного диалога


Автор: Hawkmoth 7.6.2010, 17:01
Уважаемые знатоки, вновь попрошу помощи. Разъясните, пожалуйста, как сделать "послушным" немодальное диалоговое окно? Создаю его вот по http://netcode.ru/cpp/?lang=&katID=6&skatID=69&artID=2804 примеру, привязываю к пункту меню. Открываю следующим образом (привязываю в имплементейшн-файле основного окна):

Код

void CProjectDlg::OnMyMenu()   {
    if (!m_Nemodal)      {
        m_Nemodal=new CNemodal;
        m_Nemodal>Create(IDD_NEMODAL_DLG);   }
    else    {
        m_Nemodal ->SetActiveWindow();   }
}


Закрываю так: прописываю в обработчике нажатия на кнопку Cancel в немодальном диалоге
Код

void CNemodal::OnCancel() 
{
    // TODO: Add extra cleanup here
    this->DestroyWindow();
    delete this;
}


Закрывается визуально корректно, но при попытке следующего вызова при нажатии на кнопку меню ничего не происходит. Где нужно подправить? Заранее спасибо.

Автор: Dem_max 7.6.2010, 17:52
delete this; вот это не надо делать.
А делать надо это delete m_Nemodal;

Автор: Hawkmoth 7.6.2010, 18:02
Пробовал, получаю: C2065: 'm_Nemodal' - undeclared identifier.

m_Nemodal у меня определен в заголовочном файле основного окна вот так:

Код

CProjectDlg::CProjectDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CProjectDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CProjectDlg)
    m_Nemodal=NULL;
           //}}AFX_DATA_INIT
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

Автор: Andrey44 8.6.2010, 08:58
Код


void CProjectDlg::~CProjectDlg()   {
    if (m_Nemodal)      {
        delete m_Nemodal;

}

void CProjectDlg::OnMyMenu()   {
    if (!m_Nemodal)      {
        m_Nemodal=new CNemodal;
        m_Nemodal>Create(IDD_NEMODAL_DLG);   }
    else    {
        m_Nemodal ->ShowWindow(SW_SHOW);   }
}


void CNemodal::OnCancel() 
{
    this->ShowWindow(SW_HIDE);
}

Автор: Dem_max 8.6.2010, 16:02
Код

void CNemodal::OnCancel() 
{
    this->ShowWindow(SW_HIDE);
}

Да только экземпляр будет болтаться в памяти


Автор: Andrey44 8.6.2010, 19:03
Цитата(Dem_max @  8.6.2010,  16:02 Найти цитируемый пост)
Да только экземпляр будет болтаться в памяти


Цитата(Hawkmoth @  7.6.2010,  17:01 Найти цитируемый пост)
Закрывается визуально корректно, но при попытке следующего вызова при нажатии на кнопку меню ничего не происходит. Где нужно подправить?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)