Инициализация OpenGL из класса CButton
Суть: Хочу сделать класс 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);
//---Заполнение полей r---//
render.Create( _T("BIG_OPENGL"), WS_CHILD |
WS_VISIBLE |
WS_CLIPSIBLINGS |
WS_CLIPCHILDREN |
WS_BORDER |
BS_FLAT |
BS_OWNERDRAW,
r,
this,
IDC_RENDER);
Теперь самое интересное. Кнопка создается на родительском диалоге, рисует, всячески реагирует на события и все хорошо, однако, если диалог свернуть и развернуть, на дебаге (только) получается Debug Assertion Failed. Вот сюда прилетаем при этом.
Код:
void CButton::DrawItem(LPDRAWITEMSTRUCT)
{
ASSERT(FALSE);
}
{
ASSERT(FALSE);
}
Что-то я краем глаза видел, что для нескольких окошечек нужно несколько потоков. Пните куда нужно, если не лень.
Спасибо заранее!
Код:
ASSERT(FALSE);
Нет. Всё, что относится к GUI должно рисоваться только в том потоке, в котором было создано окно.
Цитата: CassandraDied
Код:
ASSERT(FALSE);
Ну... какой есть, не я писал.
Отладчик открывает файлик winctrl1.cpp и упорно торкает пальцем в эту строчку. Чего хочет не пойму. Почему на релизе работает тогда тоже не совсем ясно. Можно бы и не обращать внимания, но такая философия меня не устраивает.
Цитата: plastictown
Почему на релизе работает тогда тоже не совсем ясно. Можно бы и не обращать внимания, но такая философия меня не устраивает.
На релизе работает, потому что для него определён макрос NDEBUG и вообще.
А какой код писал ты?
Цитата: CassandraDied
А какой код писал ты?
Такой вот проектик на VS 2010. Не ругайтесь за безграмотность.