Перейти к содержанию

На чем писать GUI?


Antonshka

Рекомендуемые сообщения

Привет!

Дочитываю книгу Щупака, по WinAPI. По словам самого автора -

Спойлер

На содержание книги повлияли:
информация, почерпнутая автором из книг таких мэтров Windowsпрограмми
рования как Чарльз Петцольд (Charles Petzold) [1], Джеффри Рихтер (Jeffrey
Richter) [5] и Фень Юань (Feng Juan) [6];

 

Петцольд, насколько я видел, пишет о том же самом что и Щупак, правда часто в более краткой форме, Фень Юань, - пишет более подробно, но у него все про GDI.

Потому, дочитав Щупака, я решил перейти уже к написанию своего собственного приложения. Писать я буду на чистом WinAPI. Для того чтобы закрепить материал, в первую очередь, и для того чтобы просто уметь это делать именно на нем.

 

Но что потом? Так и писать GUI приложения на чистом WinAPI?

На чем вы пишите GUI для своих приложений?

Читал сегодня, что на чистом WinAPI, приложения и весят меньше, и работают быстрее. Что MFC неудобный, с точки зрения стиля (я его еще не изучал). Что Qt тоже имеет какие-то проблемы.

 

Вообще в будущем есть намерение писать через DIrectX. Но если не через него, то через что?

 

Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, Antonshka сказал:

На чем вы пишите GUI для своих приложений?

первые попытки делать что-то, имеющее gui я начал с wpf(это c#) и с его формочками у меня всё время получались очень страшные интерфейсы. После этого я перешёл на c++ и попробовав разное пришёл к такому набору: простые приложения(где нужно одно окошко с кнопочками) пишу с использованием винапи, а для сложных использую вот эту штуку (позволяет очень быстро и относительно красиво делать как обычные менюшки, так и сложные таблицы, позволяет использовать opengl или directx и ещё всякие штуки, следовательно можно писать кроссплатформенные программы, поддерживает загрузку разных шрифтов и т.п. и т.п.).

 

Как по мне это лучшие из возможных вариантов для человека, не очень разбирающегося в дизайне и прочих подобных вещах(кнопочки на формочках я действительно коряво делаю, без конструкторов формочек на мои программы можно смотреть без крови из глаз).

 

 

Ну и вот пример - менюшка, стилизованная под игру medieval 2 total war(игра использует directX 9 и рисовать можно просто заинжектив dll-ку):

Спойлер

spacer.png

 

Изменено пользователем youneuoy
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, youneuoy сказал:

Ну и вот пример - менюшка, стилизованная под игру medieval 2 total war(игра использует directX 9 и рисовать можно просто заинжектив dll-ку):

  Скрыть контент

spacer.png

 

Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX?

imgui - интересная вещь. Слышал что у него недавно появилась поддержка DX12.

Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX.

Но он к сожалению на c#, а я на с++, так что не мой вариант, пока что, по крайней мере.

 

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Antonshka сказал:

Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX?

imgui - интересная вещь. Слышал что у него недавно появилась поддержка DX12.

Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX.

Но он к сожалению на c#, а я на с++, так что не мой вариант, пока что, по крайней мере.

 

MFC устарел уже давно
Qt удобная, если надо быстро накидать менюшку и не сильно париться с этим. Но крупные проекты лучше не стоит, так своих проблем хватает.
Выбор остается либо на WinAPI, сам пишу на нем, если что - то нужно.
Ну и DirectX/OpenGL если нужно что - то красивое.
WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно.

Итого:

  1. Пилишь простенькую программу - > QT
  2. Нужно что - то свое -> WinAPI
  3. Хочешь написать красивую программу или нарисовать что - то внутри игры -> DirectX/OpenGL
  • Рукалицо 1
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Antonshka сказал:

Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX?

на скриншоте рисование в окне игры. Нужно всего 3-4 функции хукнуть(я этого не делаю и использую загрузку своей библиотеки через враппер d3d9.dll, так антивирус не ругает за инжект). Кстати, imgui позволяет очень просто передавать свой контекст между несколькими .dll, очень удобно если систему плагинов делаешь.

6 часов назад, Antonshka сказал:

Слышал что у него недавно появилась поддержка DX12

давно появилась. У imgui это называется бекэндами и они есть для чего угодно, в т.ч. для андроида и мака(и при необходимости новые писать довольно просто, погляди код в папке backends). Можно использовать sdl или allegro и не париться о всяких там directx.

6 часов назад, Antonshka сказал:

Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX.

а зачем там документация? Это ведь конструктор форм, да ещё и для c#. И я его не рекомендовал, кстати - указал ведь, что у меня быстрее и красивее получается накидать менюшку прямо в коде при помощи imgui или winapi и я полностью на это перешёл.

6 часов назад, Antonshka сказал:

Но он к сожалению на c#

есть враппер imgui для c#.

1 час назад, LuBu сказал:

WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно.

графика винапи не имеет сторонних зависимостей и именно этим она хороша.

Изменено пользователем youneuoy
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, youneuoy сказал:
2 часа назад, LuBu сказал:

WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно.

графика винапи не имеет сторонних зависимостей и именно этим она хороша.

А я например видела как из winApi вызывается функция отрисовки из directx

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, LuBu сказал:

Qt удобная, если надо быстро накидать менюшку и не сильно париться с этим. Но крупные проекты лучше не стоит, так своих проблем хватает.

Ну чот откровенный бред. Весь KDE под линукс (и под винду, собственно, тоже) написан с использованием Qt, и это явно выходит за рамки "быстро накидать менюшку". И это уж точно крупный проект. Рекомендую впредь изучать матчасть, прежде чем позволять себе такие громкие высказывания. qBittorrent, кстати, тоже на Qt, и там тоже явно не "быстро накидали менюшку".

 

3 часа назад, LuBu сказал:

WinAPI помойму тоже работает через DX, но так как это API винды

Чего-чего??? (в оригинале была фотография девушки из рекламы школы иностранных языков в Бутово). Такого бреда я еще не слышал.

 

29 минут назад, imaginary сказал:

А я например видела как из winApi вызывается функция отрисовки из directx

Есть пример? Аж любопытно стало, как винапишная функция чтения файла, например, использует ДХ.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, imaginary сказал:

А я например видела как из winApi вызывается функция отрисовки из directx

Точнее наоборот

2 минуты назад, Xipho сказал:

Есть пример? Аж любопытно стало, как винапишная функция чтения файла, например, использует ДХ.

Наоборот было, я не то написала, по моему мы с тобой даже об этом говорили

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, imaginary сказал:

Наоборот было, я не то написала, по моему мы с тобой даже об этом говорили

Наоборот - это я помню, да, обсуждали. Но чтобы винапи использовал дх - это что-то новенькое.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, youneuoy сказал:

на скриншоте рисование в окне игры. Нужно всего 3-4 функции хукнуть(я этого не делаю и использую загрузку своей библиотеки через враппер d3d9.dll, так антивирус не ругает за инжект).

 

А реально создать GUI на WinAPI в DLL которую инжектишь в игру?

А то как сейчас я вижу, функции GUI на WinAPI часто требуют в качестве одного из своих параметров HINSTANCE приложения. Но у нас же не EXE, а DLL.

 

Нельзя так сделать что-ли? А то я видел как @Xipho советовал кому-то недавно каким образом можно реализовать взаимодействие EXE трейнера с загруженной DLL. Помню советовал TCP что-ли.

А так бы раз, и наше GUI  находится уже в DLL, и следовательно все контролы получают прямой доступ к переменным, для опций читов, к примеру.

 

Ссылка на комментарий
Поделиться на другие сайты

@Xipho А через что тогда WinAPI рисует? Мы когда дескриптор получаем и начинаем рисовать, он же как - то связывается с видеокартой. Не напрямую ведь, а посредством чего - то...

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Antonshka сказал:

А реально создать GUI на WinAPI в DLL которую инжектишь в игру?

Слышком расплывчато. IMGUI так-то и есть GUI, и ты его можешь собрать в DLL, которую инжектишь в игру. Какой именно GUI ты имеешь в виду? Обычные виндовые окошки поверх игры? Да, можно. Красивые картинке на оверлее игры используя GDI - да, можно, но картинка будет нещадно мерцать.

 

2 часа назад, Antonshka сказал:

А то как сейчас я вижу, функции GUI на WinAPI часто требуют в качестве одного из своих параметров HINSTANCE приложения. Но у нас же не EXE, а DLL.

Ну так ты внедряешь DLL в адресное пространство игры, и там вполне себе можешь получить инстанс приложения. Проблемы не вижу от слова "совсем".

 

2 часа назад, Antonshka сказал:

А то я видел как @Xipho советовал кому-то недавно каким образом можно реализовать взаимодействие EXE трейнера с загруженной DLL. Помню советовал TCP что-ли.

Лучше не TCP, а named pipes

 

2 часа назад, LuBu сказал:

Мы когда дескриптор получаем и начинаем рисовать, он же как - то связывается с видеокартой. Не напрямую ведь, а посредством чего - то

Почитай книгу Фень Юаня "Программирование графики для Windows".

Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, Xipho сказал:

Слышком расплывчато. IMGUI так-то и есть GUI, и ты его можешь собрать в DLL, которую инжектишь в игру. Какой именно GUI ты имеешь в виду? Обычные виндовые окошки поверх игры? Да, можно. Красивые картинке на оверлее игры используя GDI - да, можно, но картинка будет нещадно мерцать.

 

Имею ввиду создание отдельного окна, на котором будут разные стандартные контролы. Создание на WinAPI, но создание таким образом, чтобы код создания окна был в DLL, которая инжектится в игру, и чтобы не использовать TCP,  named pipes, и подобные способы связи, а просто, напрямую, менять значения переменных, определенных в DLL.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Antonshka сказал:

Создание на WinAPI, но создание таким образом, чтобы код создания окна был в DLL, которая инжектится в игру

Да пожалуйста, вполне можешь это сделать. Только не делай модальное окно, а то игра будет блокироваться во время появления такого окна. Я тебе больше скажу, ты можешь накидать так называемое диалоговое окно, и затолкать его в ресурсы длл-ки, а потом вполне себе спокойно при инжекте это окно отображать. Абсолютно никаких проблем.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Xipho сказал:

Да пожалуйста, вполне можешь это сделать. Только не делай модальное окно, а то игра будет блокироваться во время появления такого окна. Я тебе больше скажу, ты можешь накидать так называемое диалоговое окно, и затолкать его в ресурсы длл-ки, а потом вполне себе спокойно при инжекте это окно отображать. Абсолютно никаких проблем.

 

Понял, это хорошо.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.