Сейчас на форуме: hgdagon (+5 невидимых)

 eXeL@B —› Программирование —› Проблема с DirectDrew и выводом элементов управления
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 августа 2007 13:29
· Личное сообщение · #1

Бэд гай! Респект Тебе! Спрашивал на других форумах - результат 0. Может знатоки подскажут.
Проблема такая.
Нужно в полноэкранном режиме создать приложение с использованием DirectDraw, элементов управления и диалогов. В документации написано, что нормально диалоги не видны поверх поверхности DirecDraw.
Необходимо использовать IDirectDrawClipper. Присоединяю клиппер к поверхности таким кодом:

if( FAILED( hr = m_pDD->CreateClipper( 0, &pClipper, NULL ) ) )
return hr;

pClipper->SetHWnd( 0, m_hWnd );

if( FAILED( hr = m_pddsFrontBuffer->SetClipper( pClipper ) ) )
return hr;

Стрка pClipper->SetHWnd( 0, m_hWnd ); нужна для того, чтобы отсекатель следил за диалогом сам. То есть он отсекает часть поверхности в той области экрана, которую занимает диалог. При этом я не забочусь о том, когда диалог появляется, закрывается или перемещается по экрану.
Диалоги становятся видны. Также сказано, что вместо IDirectDrawSurface::Flip() нужно использовать IDirectDrawSurface::Blt . Ок. Все так и делаю. И вижу диалоги в полноэкранном режиме.
Мне нужно в главном окне ТАКЖЕ видеть кнопки. Написано используйте список отсечения. Код следующий:

if( FAILED( hr = m_pDD->CreateClipper( 0, &pClipper, NULL ) ) )
return hr;

if( FAILED( hr = pClipper->SetClipList(pRgnData, 0) ) )
return hr;
if( FAILED( hr = m_pddsFrontBuffer->SetClipper( pClipper ) ) )
return hr;

Ок. Создаю список. Приаттачиваю клиппер к поверхности и получаю ошибку - коиппер уже установлен!
И виной тому строка pClipper->SetHWnd( 0, m_hWnd ); . Если ее исключить, то в полном экране видны кнопки, а диалоги нет. А если включить-видны диалоги, а кнопки нет. Как это совместить? Чтобы было видно и то и другое. Приложение деловое, но анимации в нем столько, что использование GDI приводит к жутким тормозам! Подскажите как быть? Версия dx 7.0. Примеры смотрел. Использую VS6.0+WinApi.


 eXeL@B —› Программирование —› Проблема с DirectDrew и выводом элементов управления
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати