С чего начать программирование графического интерфейса для Windows?

У меня есть опыт написания консольных и сетевых клиент-серверных приложений на C и C++, но я почти ничего не знаю об использовании визуального API win32, MFC, Qt, wxWidgets и т.д. специализироваться, чтобы быть готовым к будущему и быть надежным?

Ответов (9)

Решение

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

Разработка любого приложения с графическим интерфейсом состоит из двух основных частей: языка и API / фреймворка . Учитывая, что вы заинтересованы в том, чтобы научиться создавать приложения с графическим интерфейсом для Windows, язык на самом деле не является для вас предметом внимания. Следовательно, вы должны выбрать язык, который вы уже знаете, и работать с фреймворком или API, которые могут быть использованы на выбранном вами языке.

Если вы хотите использовать C, вы в значительной степени ограничены самостоятельной работой с Win32 API, и в этом случае чтение Петцольда или Рихтера было бы отличным местом для начала. API Win32 может показаться довольно сложным, но его стоит потратить на изучение (imho). В Интернете есть множество руководств по Win32, и всегда есть MSDN с полным справочником / руководством по Win32 API. Убедитесь, что вы охватываете не только API, но и другие области, такие как ресурсы / диалоги, поскольку они являются строительными блоками для вашего приложения Win32.

Если вы хотите использовать C++, у вас есть все возможности, которые у вас есть при использовании C, а также несколько других. Я бы рекомендовал перейти непосредственно к Win32 API, а затем перейти к известной платформе, такой как MFC, Qt, wxWindows или GTK, чтобы вы могли тратить меньше времени на работу со стандартным кодом и вместо этого сосредоточиться на написании логики вашего приложения. Последние 3 варианта, которые я только что перечислил, имеют дополнительное преимущество в виде кроссплатформенности, поэтому вам не нужно слишком беспокоиться о проблемах, связанных с конкретной платформой. Учитывая, что вы сказали, что хотите работать с Windows, я предполагаю, что вы хотите сосредоточиться на этом, а не на кроссплатформенности - так что переходите на MFC, но сначала потратьте немного времени на Win32 API, чтобы познакомиться с некоторыми из концепции.

Имея дело с MFC и Win32 API, рекомендуется попытаться получить четкое представление о терминологии до написания кода. Например, вам нужно понять, что такое насос сообщений и как он работает. Вам нужно знать о таких понятиях, как « элементы управления, нарисованные владельцем » и создание подклассов . Когда вы поймете эти вещи (и многое другое), вам будет легче работать с MFC, потому что он использует аналогичную терминологию в интерфейсах своих классов (например, вам нужно знать, что означает «перевод сообщений», прежде чем вы сможете понять, как и когда используйте PreTranslateMessage ).

Вы также можете использовать Managed C++ для написания приложений .NET GUI, но я читал в нескольких местах, что Managed C++ на самом деле не предназначен для использования таким образом. Вместо этого его следует использовать в качестве шлюза между собственным / неуправляемым кодом и управляемым кодом. Если вы используете .NET, для создания графического интерфейса лучше всего использовать язык .NET, например VB.NET или C#.

Так что, если вы которые собираетесь использовать .NET, вы в настоящее время есть выбор WinForms библиотеки, или WPF . Я лично считаю, что вы потратите время на обучение созданию приложений WinForms, учитывая, что WPF предназначен для его замены. Со временем WPF станет более распространенным, а Winforms, скорее всего, умрут. WPF имеет гораздо более богатый набор API и не страдает многими ограничениями, которые есть у Winforms. Однако, если вы выберете этот путь, вам, несомненно, придется изучить XAML , язык разметки, который управляет приложениями WPF. Эта технология достигла зрелости, и есть много отличных мест, где можно узнать о ней. Во-первых, есть такие сайты, как LearnWPF и DrWPF.у которых есть действительно отличные статьи. Во- вторых, есть много из хороших книг по теме .

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

В заключение ...

Другими словами, Silverlight. Если вы не хотите идти по пути MS, вы можете взглянуть на Adobe Flash / Flex. И Silverlight, и Flash / Flex создают RIA. Я думаю, именно к этому мы и направляемся. Дни офисных приложений сочтены

Совершенно не согласен. Silverlight - это не то же самое, что WPF. Silverlight является веб-ориентированным и имеет только подмножество функций WPF. Учитывая, что вопрос касается приложений с графическим интерфейсом пользователя Windows, Flash / Flex Rich Internet Apps не совсем подходящее предложение. Я также не согласен с тем, что дни приложений Rich Client (например, офисных) вообще сочтены.

Надеюсь, это поможет. Удачи :)

Сначала усвойте основы. Лучший учебник, который я нашел: http://winprog.org/tutorial/start.html

После этого, хотя домашняя страница ужасно неприятна, учебные страницы хороши по содержанию и эстетике: http://www.tenouk.com/cplusmfcdotnet.html

Тогда, конечно, есть MSDN .

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

Мой первый опыт написания простых приложений с графическим интерфейсом для Windows был связан с C# и Visual Studio. Интерфейс построения графического интерфейса пользователя представляет собой простую операцию перетаскивания, которая генерирует скелетные методы на основе возможных действий пользователя. Я занимался только базовым программированием с этим, но я думаю, что это было бы отличным местом, чтобы начать изучать основы и расширять более продвинутые возможности по ходу дела.

Для бизнес-приложений Windows Forms очень развита. Он обеспечивает плавный путь от автоматической генерации большого количества данных к возможности точного управления и создания собственного. Существует множество высококачественных сторонних элементов управления и большое количество примеров, документов и т. Д. Трудно столкнуться с проблемой, которую не решил кто-то другой. Я настоятельно рекомендую получить некоторые базовые знания Win32 (например, Petzold ), поскольку фреймворк WinForms живет поверх него.

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

@StephenCox: неправильный ответ на неправильный вопрос. OP спрашивает о настольных клиентских приложениях и, более того, о WPF! = Silverlight.

Поскольку вы уже знакомы с C и C++, я бы порекомендовал научиться писать простое приложение с графическим интерфейсом для Windows, используя книгу Чарльза Петцольда. Это даст вам фундаментальное представление о том, как работает Windows. Хорошо понимать, что почти все, что вы видите, - это окно (например, кнопка - это окно) и что эти окна отвечают на сообщения. Я бы не стал тратить на это много времени, и вам не обязательно делать это сначала, если вы собираетесь выбрать WPF. Я просто думаю, что хорошо иметь базовое понимание этого.

Недавно на .Net Rocks был хороший подкаст под названием «Кейт Грегори разрабатывает C++ для Vista!» там она рекомендует, чтобы кто-то начинающий сейчас не использовал / изучал MFC (даже если он был недавно обновлен).

Что касается подготовки к будущему, вам необходимо изучить WPF, но он еще не завершен, поэтому в зависимости от типов клиентских приложений, которые вы хотите создать, вам, вероятно, потребуется изучить WinForms. Большинство людей еще не используют WPF, так что сейчас хорошее время для начала обучения. Я думаю, вам будет проще изучить его с помощью C#, чем выполнять управляемый код с помощью C++.

В качестве простой отправной точки для ознакомления с "событийно-управляемой" природой в основном все фреймворки создаются на основе FLTK .

Вот несколько видео для быстрого старта Ссылка

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

Я бы никогда не пошел по Silverlight, Flash / Flex или другим подобным маршрутам. Это выглядит красиво, но главная проблема в том, что код движка, на котором он работает, полностью закрыт и контролируется одной компанией. Возьмем, к примеру, 64-битные версии обоих. Если появится какая-то новая платформа, вы не сможете перенести на нее существующий код.

Есть много онлайн-руководств по Win32:

http://www.zeusedit.com/forum/viewtopic.php?t=1218

Есть много компиляторов на выбор:

http://www.zeusedit.com/forum/viewtopic.php?t=238

Я также рекомендовал бы получить документацию Borland Win32 SDK в формате файла WinHelp:

http://www.zeusedit.com/forum/viewtopic.php?t=7

Он охватывает только основы Win32, но при запуске он может быть полезен, поскольку он менее сложен и менее раздут, чем MSDN.