Перейти к содержанию
Авторизация  
Antonshka

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

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

Привет!

Дочитываю книгу Щупака, по 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 сказал:

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

 

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

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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