...
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
RenderingDirect3D(); //---koltaviy: это функция рендеринга
...
PeekMessage() для окна в CB6
Все проблемные ситуации потихоньку решаются, но сейчас вообще уперся в стенку.
Цитата из книги Горнакова С. "DX 9. Уроки программирования на C++", взятая из статьи посвященной рендерингу(прорисовке) объекта:
Цитата:
Код:
И если поступить именно так, то все, что вы увидите после успешной компиляции, - это мигнувшее на доли секунды окно. Дело в том, что сама функция GetMessage() не предназначена для работы в реальном времени, поэтому нужно заменить эту функцию на PeekMessage(), которая практически одинакова с GetMessage(). За исключением того, что PeekMessage() позволяет постоянно следить за очередью сообщений, и ее работа сводится к простым действиям: есть сообщения - обрабатываем, нет - ждем дальше.
...
Код:
...
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
RenderingDirect3D();
}
...
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
RenderingDirect3D();
}
...
Ситуация возникла именно такая же. Но, поскольку собщения в CB6 обрабатываются по-другому, не понимаю как решить эту проблему. Нажимаешь кнопку старта, окно мелькает и выполнение программы заканчивается.
Прошу не предлагать мне перейти в другую среду разработки. Знаю, что это гемор - и сам уже натерпелся. Но CB6 - требование заказчика.
Ну, рендерить можно в отдельном потоке, а в окно выводить по мере готовности. А если очень хочется сделать так, как в книге, то есть такое свойство у компонента, WindowProc называется. Подменяешь его просто своей функцией.