SomeRandomMan Ответов: 5

Как написать свой собственный графический интерфейс на C++


Я хотел бы написать свой собственный графический интерфейс на c++. Это включает в себя создание всех необходимых заголовков и макросов. Я не могу найти учебник, который дает мне какую-либо информацию о том, с чего начать, или они предлагают e загрузить Qt, wxWidgets или аналогичную программу. Кто-нибудь может мне помочь?

Что я уже пробовал:

Я искал около часа в поисках какой-либо информации, но ничего не нашел.

David_Wimbley

Что вы пробовали? Мне трудно поверить, что во всей бесконечной мудрости Google нет ничего, что могло бы помочь вам в чем-то столь же простом, как создание графического интерфейса. Я сделал быстрый поиск в google и нашел тонны ссылок о Qt, так что либо вам нужно быть более конкретным с тем, что вы хотите достичь, либо вам нужно еще раз взглянуть на поиск в google.

Я не хочу быть грубым, но дополнительная информация/демонстрация того, что вы приложили усилия, имеет большое значение.

SomeRandomMan

Я не имею в виду использование Qt или чего-то еще. Я имею в виду попытку сделать его полностью с нуля (написанный полностью мной).

Mohibur Rashid

Windows, linux или что?

SomeRandomMan

Окна

Mohibur Rashid

Начните с изучения того,как работают окна.

SomeRandomMan

Спасибо.

Philippe Mori

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

По крайней мере, для Win32 API трудно создать достойный фреймворк, который работал бы объектно-ориентированным образом и скрывал бы особенности API, чтобы сделать его менее подверженным ошибкам. Некоторые из вещей, которые несколько трудно сделать без глубокого понимания Win32 API и языка C++, - это способ связать дескриптор (HWND) с объектом C++, декодировать сообщения windows безопасным и эффективным способом, а также правильно направлять сообщения к нужным элементам управления. Например, на уровне API управляющие сообщения owner-draw отправляются владельцу вместо элемента управления, поэтому для создания автономного элемента управления необходимо реализовать некоторую маршрутизацию, которая позаботится об этом.

SomeRandomMan

Я знаю, что для этого потребуется много кода, вот почему я хочу это сделать.

[no name]

Я бы посоветовал вам взглянуть на библиотеки графического интерфейса с открытым исходным кодом. Они будут направлять вас.

SomeRandomMan

Спасибо.

[no name]

Добро пожаловать!

Philippe Mori

И что бы вы хотели, чтобы ваш фреймворк делал?

Должен ли это быть тонкий слой вокруг части Win32 API, или вы хотите хорошую инкапсуляцию или что-то среднее?

Вы хотите использовать стандартные элементы управления или сделать свой собственный пользовательский интерфейс?

Philippe Mori

Смотреть на : Список наборов инструментов виджетов Это даст вам представление о существующих фреймворках.

5 Ответов

Рейтинг:
1

Patrice T

Это выглядит как большой и сложный проект.
Я думаю, что вы можете использовать этот Тодолист:
ToDoList 7.0.13 - эффективный и гибкий способ оставаться в курсе ваших задач[^]
Этот Тодолист предназначен для программистов, каждая задача может быть разделена на подзадачи на столько уровней, сколько вам нужно.

Я рекомендую начать с 3 задач верхнего уровня:
- Общее описание.
- Техническое описание / организация.
- Данные: описание структур и объектов, которые вам понадобятся.

При создании подзадач вводятся подробные сведения и уточняется описание.
Все это даст вам лучшее представление о том, что вы хотите сделать, и о размере/сложности проекта.


Philippe Mori

Хороший совет, но на самом деле не отвечает на вопрос.

Patrice T

Уже есть 3 решения !
Просто хочу осветить еще один аспект, который, как я знаю из первых рук, имеет значение в больших проектах (и в маленьких тоже).

Рейтинг:
0

CPallini

Вы можете начать читать эту страницу: Пошаговое Руководство: Создание Настольных Приложений Windows (C++)[^].


Maciej Los

Коротко и по существу-5!

CPallini

Спасибо.

Philippe Mori

Фактически, это было бы отправной точкой... Однако этот код по существу выполняется процедурным способом, поэтому, если вы хотите сделать какой-то объектно-ориентированный фреймворк, требуется гораздо больше работы.

Рейтинг:
0

Richard MacCutchan

Видеть Устаревшая Графика (Windows)[^].


Philippe Mori

Может быть полезно, если вы хотите сделать свой собственный графический интерфейс. Это не очень поможет, если вы хотите использовать стандартные элементы управления.

Richard MacCutchan

Конечно, это будет так, вы можете использовать GDI или GDI+ практически для чего угодно в Windows. Вы можете использовать стандартные элементы управления, подклассировать их, чтобы изменить их в соответствии с вашими собственными требованиями, или даже создать совершенно новые.

Рейтинг:
0

Jochen Arndt

Просто подумайте о том, что нужно графическому интерфейсу:


  • Графический интерфейс содержит видимые элементы, которые должны быть нарисованы. Это требует использования графического интерфейса, зависящего от операционной системы, такого как GDI и GDI+ с Windows. Затем создайте видимые элементы и реализуйте функции рисования.
  • Графический интерфейс обычно имеет активные элементы (например, активное окно и элемент управления с фокусом). Поэтому вы должны реализовать обработку этих состояний.
  • Графический интерфейс должен обрабатывать различные виды пользовательского ввода, например с клавиатуры, мыши или сенсорного экрана. Для таких устройств опять же существует системный зависимый интерфейс.
  • При вводе пользователем должны быть выполнены определенные действия. Обычно это реализуется с помощью какой-то обработки сообщений и обработки событий.

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


Philippe Mori

Многие из этих точек обрабатываются системой, если графический интерфейс основан на стандартных элементах управления.

Рейтинг:
0

Philippe Mori

Прежде всего, написание GUI-фреймворка на C++ - это очень тяжелая работа, и она предполагает, что вы очень глубоко знаете Win32 API и являетесь опытным программистом на C++. Таким образом, у вас должно быть, по крайней мере, несколько лет опыта работы в C++ и Win32 API.

Обычно человек предпочитает использовать существующую структуру. Можно было бы также писать на уровне Win32 API, но я бы не рекомендовал этого делать, за исключением очень простых приложений...

Прежде всего, вы должны изучить существующие варианты. Вот некоторые из них: Список инструментов виджетов-Википедия, свободная энциклопедия[^]

Кроме того, подобный вопрос был опубликован в прошлом и имеет много полезных ответов, которые вы должны прочитать: Как написать НПК графический интерфейс программы [^].

Написание собственного графического интерфейса на C++ могло бы иметь смысл 20 лет назад, но сегодня я думаю, что это может иметь смысл только для некоторых крупных приложений, разработанных большой командой с конкретными потребностями. Для большинства настольных приложений windows, вероятно, имеет смысл использовать C# и WPF, поскольку они гораздо более современны и поддерживают шаблон MVVM.

Со многими графическими фреймворками C++ , основанными на Win32 API, вы не можете установить много "свойств", таких как заголовок, размер, цвет фона, прежде чем будет создан фактический дескриптор (HWND), за несколькими исключениями.