Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Инициализация OpenGL из класса CButton

311
21 сентября 2012 года
plastictown
309 / / 08.01.2006
Доброго времени суток! Не уверен, что вопрос по адресу, но все же.

Суть: Хочу сделать класс COpeтGLButton, производный от CButton, который после инициализации может рисовать на себе, либо родитель через его методы будет делать то же.
Что делаю: Создаю в родительском CDialog::OnInitDialog() объект COpenGLButton:


Код:
RECT r;

//---Заполнение полей r---//

render.Create( _T("BIG_OPENGL"), WS_CHILD |
                WS_VISIBLE |
                WS_CLIPSIBLINGS |
                WS_CLIPCHILDREN |
                WS_BORDER |
                BS_FLAT |
                BS_OWNERDRAW,
                r,
                this,
                IDC_RENDER);
Далее внутри объекта render происходит обычная инициализация окна OpenGL, каких в сети много и проверены и работают.
Теперь самое интересное. Кнопка создается на родительском диалоге, рисует, всячески реагирует на события и все хорошо, однако, если диалог свернуть и развернуть, на дебаге (только) получается Debug Assertion Failed. Вот сюда прилетаем при этом.

 
Код:
void CButton::DrawItem(LPDRAWITEMSTRUCT)
{
    ASSERT(FALSE);
}
Вопрос: Что я делаю не так? Можно ли вообще такое делать без ущерба для здоровья? И еще... Хотелось бы сразу две таких отдельных кнопочки на форме:)

Что-то я краем глаза видел, что для нескольких окошечек нужно несколько потоков. Пните куда нужно, если не лень.

Спасибо заранее!
414
21 сентября 2012 года
CassandraDied
763 / / 24.05.2012
 
Код:
ASSERT(FALSE);
Это и весь код в DrawItem?
Цитата:
Что-то я краем глаза видел, что для нескольких окошечек нужно несколько потоков.


Нет. Всё, что относится к GUI должно рисоваться только в том потоке, в котором было создано окно.

311
21 сентября 2012 года
plastictown
309 / / 08.01.2006
Цитата: CassandraDied

 
Код:
ASSERT(FALSE);
Это и весь код в DrawItem?


Ну... какой есть, не я писал.
Отладчик открывает файлик winctrl1.cpp и упорно торкает пальцем в эту строчку. Чего хочет не пойму. Почему на релизе работает тогда тоже не совсем ясно. Можно бы и не обращать внимания, но такая философия меня не устраивает.

414
21 сентября 2012 года
CassandraDied
763 / / 24.05.2012
Цитата: plastictown
Почему на релизе работает тогда тоже не совсем ясно. Можно бы и не обращать внимания, но такая философия меня не устраивает.


На релизе работает, потому что для него определён макрос NDEBUG и вообще.
А какой код писал ты?

311
21 сентября 2012 года
plastictown
309 / / 08.01.2006
Цитата: CassandraDied
А какой код писал ты?



Такой вот проектик на VS 2010. Не ругайтесь за безграмотность.

Прикрепленные файлы:
69 Кб
Загрузок: 807
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог