Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Создание DirectX не на все окно


Автор: aam1go 3.11.2015, 16:05
Ребят, очень надеюсь на вашу помощь, хотелось бы узнать.

Предположим у нас есть пустое окно на Winapi 800,600 , так вот, есть ли возможность, а я думаю есть, создать Directx Область размером в 400х400 на этом окне, чтобы остальное место занять элементами управления, т.е кнопочками и эдитами и прочим, как это сделано в редакторах карт и прочих в играх?

Второй вопрос, можно ли сделать это в QT так, чтобы я мог создавать эти кнопки и раскидывать так как надо с помощью контруктора а не с помощью Winapi по координатам?

Этот вопрос не требует ответа типа да и нет. Покажите пример, который можно применить, очень надеюсь на вашу помощь)

Автор: Sajtran 4.11.2015, 18:16
а что мешает в этом окне создать ещё одно дочернее окно(панель) нужного размера?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Sozdaniye-DirectX-ne-na-vse-okno-id5638b13aae201525448b4567#findElement_E7045_563a2165ae20150527f4f2e5_0

Автор: BorisVorontsov 9.11.2015, 00:44
Цитата(aam1go @  3.11.2015,  16:05 Найти цитируемый пост)
Покажите пример, который можно применить, очень надеюсь на вашу помощь) 

То, что ты хочешь, называется viewport: https://msdn.microsoft.com/en-us/library/windows/desktop/bb206341.aspx
Но это неправильное решение. Правильное озвучено товарищем выше: размести на основном окне дочернее окно Qt, которое будет выполнять роль поверхности вывода, компоненты размести вокруг него.

Автор: math64 7.12.2015, 14:26
Если Вы работаете в Qt - с ним идет несколько примеров с QGLWidget.
Создаешь в QtCreator главное окно с формой, редактируешь элементы управления, предпочтительно в QDockWidget,
а дальше заменяешь центральный виджет:
Код

class GLWidget : public QGlWidget { ... };

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new UI::MainWindow)
{
   ui->setupUi(this);
   glWidget = new GlWidget(this);
   setCentralWidget(glWidget);
   ...
}


Также можно использовать qml. Там есть компонент Canvas3D

Автор: Merlin_ua 15.10.2016, 16:51
А как насчет QT c Direct3D?

Автор: Alexeis 15.10.2016, 17:17
winId() возвращает HWND главного окна. Для дочерних окон там сложнее. Изначально виджеты создаются без Windows окон. Есть только одно главное. Но технически Qt позволяет создавать окна и для других виджетов.  Есть проект qtwinmigrate, который позволяет интегрировать Qt приложение с WinApi кодом и наоборот. Проект старый, но с 5м Qt работает корректно.

Автор: KaldYn 29.10.2016, 11:02
Цитата(Alexeis @ 15.10.2016,  17:17)
winId() возвращает HWND главного окна. Для дочерних окон там сложнее. Изначально виджеты создаются без Windows окон. Есть только одно главное. Но технически Qt позволяет создавать окна и для других виджетов.  Есть проект qtwinmigrate, который позволяет интегрировать Qt приложение с WinApi кодом и наоборот. Проект старый, но с 5м Qt работает корректно.

т.е. с помощью qtwinmigrate точно получится, подобный вопрос тоже актуален.

Автор: Alexeis 29.10.2016, 11:36
Цитата(KaldYn @  29.10.2016,  12:02 Найти цитируемый пост)
т.е. с помощью qtwinmigrate точно получится, подобный вопрос тоже актуален. 

qtwinmigrate позволяет интергрировать WinApi окна в Qt приложении или же встраивать Qt Widget-ы в WinApi приложение (они это называют mfc приложение, но интеграция делается на уровне WinApi, от mfc зависимостей нет). Собственно для использования DirectX требуется привязка к Windows окну.

Автор: Marcus22 22.8.2017, 14:19
 Не работает обновление окна в С++ WinAPI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)