Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать валидность указателя на окно 
V
    Опции темы
Albor
Дата 31.10.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как, собственно, можно определить вызывался ли метод Create для окна. Например, в некотором классе объявляется объект и имеется ф-ция, возвращающая указатель на него
Код

class SomeClass
{
CRichEditCtrl m_rich;
public:
CRichEditCtrl * GetRich() {return &m_rich;}
}

А теперь где-то, где используется SomeClass
Код

SomeClass sc;
//----------
CRichEditCtrl * pEdit = sc->GetRich();

Теперь загвоздка: указатель будет ненулевой, поскольку память уже выделена, а Create() для m_rich, возможно, ещё не вызывалась. В такой ситуации использование указателя ни к чему хорошему не приведёт. Метод IsWindow() нельзя использовать по той же причине.
PM MAIL ICQ   Вверх
Albor
Дата 31.10.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всё таки проверить можно через hWnd окна. В моём случае произошёл вот какой казус: Вызов ((CMyView *)GetActiveView())->GetRich() возвращал ненулевое значение, причём GetActiveView() возвращал ноль. На этой строке программа не стопорилась и я не сразу понял в чём дело. Полученный указатель, естественно, указывал неизвестно куда и параметр m_hWnd вообще не определялся дебаггером как существующий. Приведение типа к CMyView * сыграло злую шутку.

Это сообщение отредактировал(а) Albor - 31.10.2010, 18:47
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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