Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель на окно - можно проверить, что, окно еще существует? 
:(
    Опции темы
Бугемот
Дата 27.4.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.12.2005

Репутация: 1
Всего: 1



Привет!
в mdi приложении из главного окна может открываться дочернее, но всего лишь одно. указатель на это дочернее окно является членом класса CMainFrame. Вот код:
Код

void CMainFrame::OnShowAll()
{
    if (m_pFrameShowAll) // если указатель не пустой
        if (!IsWindow(m_pFrameShowAll->GetSafeHwnd())) // вот тут проверяю, существует ли окно.
            m_pFrameShowAll = NULL;
    if (m_pFrameShowAll)
    {
        if (m_pFrameShowAll->GetSafeHwnd())
        {
            m_pFrameShowAll->MDIActivate();
            m_pFrameShowAll->MDIRestore();
            return;
        }
    }
....
}

окон подобного типа у меня несколько (соответственно, на каждое окно - свой указатель)
если одновременно открыть все возможные окна в приложении (и из главного окна и из дочерних), а потом их закрыть, оставив только главное окно. то через некоторое время на строке
Код

if (!IsWindow(m_pFrameShowAll->GetSafeHwnd())) 

отладчик выдает ошибку (отлаживаю пошагово). хотя код работает и проверен многократно. а ошибка вылетает только если все окна открывать. что это за ерунда такая? smile 
PM MAIL   Вверх
threef
Дата 27.4.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 1
Всего: 10



проверь m_pFrameShowAll на NULL 
PM MAIL   Вверх
Бугемот
Дата 27.4.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.12.2005

Репутация: 1
Всего: 1



Самая первая строка кода это и делает smile 
PM MAIL   Вверх
threef
Дата 28.4.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 1
Всего: 10



Поставь :: перед IsWindow. Ато у тебя с MainFrame глюк возможен. Или мало информации, чтобы рассуждать. Еще обрати внимание на то, какой ASSERT выскакивает при этом 
PM MAIL   Вверх
Бугемот
Дата 29.4.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.12.2005

Репутация: 1
Всего: 1



Цитата(threef @  28.4.2006,  20:38 Найти цитируемый пост)
Поставь :: перед IsWindow

так и было с самого начала, когда уже начались шаманские танцы, убрал :: smile
Цитата(threef @  28.4.2006,  20:38 Найти цитируемый пост)
 Еще обрати внимание на то, какой ASSERT выскакивает при этом 

память can not be read, причем эта ошибка проявляется как-то не сразу. Т.е. код может несколько раз отработать нормально, а потом на этой строчке - рухнет.
Вобщем, после двух дней мытарств я так и не разобрался в чем дело. Пришлось переделать - теперь просто получаю список всех дочерних для CMainFrame окон и все. (EnumChildWindows) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.