25

我有使用 C 和 C++ 编写控制台和网络客户端/服务器应用程序的经验,但我对使用 win32 可视化 API、MFC、Qt、wxWidgets 等几乎一无所知。从哪里开始,我应该用什么方法专攻,以便为未来做好准备和稳健?

4

9 回答 9

43

这是一个相当广泛的问题,因为可以通过多种方式在 Windows 中编写 GUI 应用程序。

开发任何 GUI 应用程序有两个主要部分:语言API/框架。考虑到您有兴趣学习构建 Windows GUI 应用程序,该语言并不是您真正关注的重点。因此,您应该选择一种您已经知道的语言,并使用您选择的语言可以利用的框架或 API。

如果您想使用 C,您几乎只能自己处理 Win32 API,在这种情况下,阅读PetzoldRichter将是很好的起点。Win32 API 可能非常令人生畏,但值得努力学习(恕我直言)。网上有很多关于 Win32 的教程,而且总是有MSDN,有完整的 Win32 API 参考/指南。确保您不仅涵盖 API,还涵盖其他领域,例如资源/对话框,因为它们是您的 Win32 应用程序的构建块。

如果您想使用 C++,那么您拥有使用 C 时拥有的所有选项以及其他一些选项。我建议直接使用 Win32 API,然后转向已知框架,例如 MFC、Qt、wxWindows 或 GTK,这样您就可以花更少的时间处理样板代码,而专注于编写应用程序逻辑。我刚刚列出的最后 3 个选项具有跨平台的额外好处,因此您不必过多担心特定于平台的问题。鉴于你说你想使用 Windows,我假设你热衷于专注于它而不是跨平台——所以使用 MFC,但首先花一些时间使用 Win32 API 来熟悉一些的概念。

在处理 MFC 和 Win32 API 时,最好在编写代码之前尝试深入了解术语。例如,您需要了解什么是消息泵,以及它是如何工作的。您需要了解“所有者绘制的控件”和子类化等概念。当您了解这些(以及更多)内容后,您会发现使用 MFC 会更容易,因为它在其类接口中使用了类似的术语(例如,您需要先了解“翻译消息”的含义,然后才能了解如何以及何时使用PreTranslateMessage)。

您也可以使用托管 C++ 编写 .NET GUI 应用程序,但我在一些地方读到托管 C++ 并不是真正打算以这种方式使用的。相反,它应该用作本机/非托管代码和托管代码之间的网关。如果您使用 .NET,最好使用 .NET 语言(例如 VB.NET 或 C#)来构建您的 GUI。

因此,如果您打算使用 .NET,您目前可以选择WinForms库或WPF。鉴于 WPF 旨在替代它,我个人认为你会浪费时间学习构建 WinForms 应用程序。随着时间的推移,WPF 将变得更加流行,Winforms 很可能会消亡。WPF 具有更丰富的 API 集,并且不受 Winforms 的许多限制。但是,如果您确实选择了这条路线,那么您无疑必须学习XAML,它是一种驱动 WPF 应用程序的标记语言。这项技术正在成熟,有很多很棒的地方可以了解它。首先,有LearnWPFDrWPF等网站其中有一些非常棒的文章。其次,有很多关于这个主题优质 书籍

所以,总而言之,一旦你选择了你的语言和技术,这条路实际上很容易。只需拿起一两本书,阅读一些博客,阅读一些代码示例……最重要的是……编写代码。不断写作,不断犯错,并不断从中学习。

作为最后一点...

换句话说,银光。如果你不想走 MS 路线,你可以看看 Adob​​e 的 Flash/Flex。Silverlight 和 Flash/Flex 都构建 RIA。我认为这是我们前进的方向。Office 之类的应用程序的日子屈指可数

我完全不同意。Silverlight 与 WPF 不同。Silverlight 是特定于 Web 的,并且仅具有 WPF 功能的一个子集。鉴于问题要求 Windows GUI 应用程序,Flash/Flex Rich Internet Apps 并不是一个合适的建议。我也不同意富客户端应用程序(例如办公室)的日子已经屈指可数了。

我希望这会有所帮助。祝你好运 :)

于 2008-08-07T11:24:54.997 回答
5

我不知道我是否称它为一个好的起点,但如果您想为未来做好准备,请查看完全为 Windows 的 GUI 编程而构建的windows 演示基础

于 2008-08-07T03:08:35.920 回答
3

我第一次为 Windows 编写简单的 GUI 应用程序是使用 C# 和 Visual Studio。GUI 构建界面是一个简单的拖放交易,它根据潜在的用户操作生成框架方法。我只用它进行了相当基本的编程,但我想这将是一个很好的地方,可以开始学习基础知识并随着你的发展而扩展到更高级的功能。

于 2008-08-07T03:47:41.987 回答
3

网上有很多Win32教程:

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

有很多编译器可供选择:

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

我还建议以 WinHelp 文件格式获取Borland Win32 SDK文档:

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

它只涵盖了 Win32 的基本知识,但在开始时,这会很有帮助,因为它比 MSDN 不那么令人生畏和臃肿。

于 2008-10-27T23:20:25.973 回答
1

我永远不会走 Silverlight、Flash/Flex 或任何类似的路线。它看起来确实不错,但主要问题是运行它的引擎代码是完全封闭的,并由一家公司控制。以这两者的 64 位版本为例。如果出现一些新平台,您将无法将现有代码迁移到该平台。

于 2008-09-18T10:13:59.933 回答
0

对于商业应用,Windows Forms 非常成熟。它提供了一条从为您自动生成大量内容到允许细粒度控制和滚动您自己的温和路径。那里有大量高质量的第三方控件和大量示例、文档等。很难遇到别人没有解决的问题。我强烈建议您获取一些 Win32 的背景知识(例如Petzold),因为 WinForms 框架就在它之上。

我没有 WPF 经验,但从我看到的示例应用程序来看,对于那些界面将受益于更多图形隐喻的应用程序来说,它看起来是一个不错的选择。所以如果你在做一个银行应用程序,可能不值得额外的设计开销。但是,如果你正在做一个仓库管理应用程序,可以通过将漂亮的盒子放入漂亮的垃圾箱来改进它。

@StephenCox:对错误问题的错误答案。OP 正在询问桌面客户端应用程序,此外,WPF != Silverlight。

于 2008-08-12T12:23:30.143 回答
0

作为一个简单的起点来了解“事件驱动”性质,基本上所有框架都是围绕FLTK创建的。

这里有一些快速入门视频链接

对于专业用途,我推荐 Qt,价格昂贵但在商业环境中通常值得。

于 2008-08-12T13:26:07.160 回答
0

由于您已经熟悉 C 和 C++,我建议您学习如何使用 Charles Petzold 的书编写简单的 Windows GUI 应用程序。它将让您基本了解 Windows 的工作原理。很高兴了解您看到的大多数东西都是一个窗口(例如,按钮就是一个窗口)并且这些窗口响应消息。不过,我不会花很多时间在这上面,如果你要选择 WPF,你不一定需要先做这件事。我只是觉得对这个有一个基本的了解是很好的。

最近在 .Net Rocks 上有一个不错的播客,名为“Kate Gregory Develops in C++ for Vista!” 在那里,她建议从现在开始的人不应该使用/学习 MFC(即使它最近已更新)。

至于为未来做准备,您需要学习 WPF,但它还没有完成,因此根据您要创建的客户端应用程序的种类,您可能需要学习 WinForms。大多数人还没有使用 WPF,所以现在是开始学习的好时机。我认为您会发现使用 C# 来学习它比使用 C++ 编写托管代码更容易。

于 2008-08-12T13:59:12.820 回答
0

先把基础搞好。我发现的最好的教程是:http ://winprog.org/tutorial/start.html

在那之后,虽然主页令人讨厌,但教程页面在内容和美学上都不错:http ://www.tenouk.com/cplusmfcdotnet.html

当然还有MSDN

于 2011-10-29T08:56:23.700 回答