2008-08-07 4 views
21

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

ответ

43

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

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

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

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

Имея дело с MFC и API Win32, рекомендуется пробовать глубокое понимание терминологии до написания кода. Например, вам нужно понять, что такое message pump и как оно работает. Вы должны знать о таких понятиях, как «owner-drawn элементов управления» и subclassing. Когда вы понимаете эти вещи (и многое другое), вам будет легче работать с 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, у которых есть действительно интересные статьи. Во-вторых, есть plenty от qualitybooks на topic.

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

В заключительной ноте ...

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

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

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

+2

Если вы хотите использовать Win32 API из C++, есть также WTL. См. Http://wtl.sourceforge.net/ – 2008-10-23 07:58:58

+0

+1 для Петцольда и Ричер. – 2013-05-21 18:40:49

6

Я не знаю, если я бы назвал это хорошее место, чтобы начать, но если вы хотите быть в будущем готовы, посмотрите на windows presentation foundation, который построен исключительно для целей программирования GUI для окон

4

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

0

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

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

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

0

Для простой отправной точки, чтобы получить голову вокруг «управляемой событиями» природы, в основном все рамки созданы вокруг вида FLTK.

Вот некоторое быстрое стартовое видео Link

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

0

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

Был хороший подкаст недавно на .Net Rocks, который называется "Kate Gregory Develops in C++ for Vista!", там она рекомендует, чтобы кто-то, начинающий сейчас, не должен использовать/учиться MFC (хотя он был недавно обновлен).

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

1

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

3

Есть много онлайновых обучающих программ 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.

Смежные вопросы