По сути, система управления окнами операционной системы предоставляет некоторые вызовы API, которые можно выполнять для выполнения таких задач, как создание окна или нажатие кнопки в окне. По сути, вы получаете набор заголовочных файлов и можете вызывать функции в этих импортированных библиотеках, так же, как вы делаете это с stdlib и printf
.
Каждая операционная система поставляется с собственным инструментарием графического интерфейса пользователя, набором файлов заголовков и вызовами API, а также собственным способом работы. Существуют также кроссплатформенные наборы инструментов, такие как GTK , Qt и wxWidgets, которые помогают создавать программы, которые работают где угодно. Они достигают этого, имея одинаковые вызовы API на каждой платформе, но различную реализацию для тех функций API, которые обращаются к вызовам API собственной ОС.
Одна вещь, которая у них всех будет общая, которая будет отличаться от программы CLI, это то, что называется циклом обработки событий. Основная идея здесь несколько сложна и трудна для сжатия, но по сути это означает, что в вашем основном классе / основной функции нет ничего особенного, кроме:
- проверить очередь событий, если есть какие-либо новые события
- если есть, отправьте эти события соответствующим обработчикам
- когда вы закончите, верните управление операционной системе обратно (обычно с помощью какого-то специального вызова функции "sleep" или "select" или "yield")
- тогда функция yield вернется, когда операционная система будет готова, и у вас будет еще один цикл.
Есть много ресурсов о программировании на основе событий. Если у вас есть какой-либо опыт работы с JavaScript, это та же самая основная идея, за исключением того, что вы, сценарист, не имеете доступа или контроля над самим циклом событий или какими бы то ни было событиями, ваша единственная задача - писать и регистрировать обработчики.
Вы должны иметь в виду, что программирование GUI невероятно сложно и вообще сложно. Если у вас есть возможность, на самом деле гораздо проще просто встроить встроенный веб-сервер в вашу программу и иметь интерфейс на основе HTML / web. Единственное исключение, с которым я столкнулся, - это учебники Apple по созданию интерфейса Cocoa + Xcode +, которые делают его легко доступной средой для людей, плохо знакомых с программированием GUI, которые я видел.