在哪里可以开始为Windows编写GUI的好地方?

时间:2020-03-05 18:38:14  来源:igfitidea点击:

我有使用C和C ++编写控制台和网络客户端/服务器应用程序的经验,但是我几乎不了解使用win32可视化API,MFC,Qt,wxWidgets等。在哪里开始,以及应该使用哪种方法擅长,以便将来做好准备并保持健壮?

解决方案

回答

我不知道我是否将它称为一个不错的起点,但是如果我们想将来做好准备,请看一下Windows演示基础,该基础完全是为Windows的GUI编程而构建的。

回答

我最初为Windows编写简单的GUI应用程序的经验是使用Cand Visual Studio。 GUI构建界面是一个简单的拖放处理,可基于潜在的用户操作生成框架方法。我只是用它进行了相当基本的编程,但是我想这将是一个开始学习基础知识并随我们所想扩展到更高级功能的好地方。

回答

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

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

如果我们想使用C,那么我们就不得不自己处理Win32 API,在这种情况下,阅读Petzold或者Richter将是一个不错的起点。 Win32 API可能令人生畏,但值得努力学习(恕我直言)。 Web上有很多关于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,则最好使用VB.NET或者C之类的.NET语言来构建GUI。

因此,如果要使用.NET,则当前可以选择WinForms库或者WPF。我个人认为,鉴于WPF旨在取代WinForms应用程序,我们将在浪费时间来构建WinForms应用程序。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。随着时间的流逝,WPF将变得更加流行,Winforms最有可能死掉。 WPF具有更丰富的API集,并且不受Winforms的许多限制的困扰。但是,如果我们选择这种方法,则毫无疑问,我们将必须学习XAML,这是一种驱动WPF应用程序的标记语言。这项技术已经日趋成熟,有很多很棒的地方可以了解它。首先,有诸如LearnWPF和DrWPF之类的网站,其中有一些非常出色的文章。其次,有很多关于该主题的优质书籍。

因此,总而言之,一旦我们选择了语言和技术,这条道路实际上就很容易了。只需拿一本书或者两本书,阅读一些博客,阅读一些代码示例..最重要的是……编写代码。继续写作,不断犯错误,并从错误中继续学习。

最后一点...

In other words, Silverlight. If you don't want to go the MS route you might give Adobe's Flash/Flex a look see. Both Silverlight and Flash/Flex build RIA's. Which I think is where we are headed. They days of Office like apps are numbered

我完全不同意。 Silverlight与WPF不同。 Silverlight是特定于Web的,并且仅具有WPF功能的一部分。考虑到该问题要求使用Windows GUI应用程序,因此Flash / Flex Rich Internet Apps并不是真正合适的建议。我也不同意富客户端应用程序(例如办公室)的使用日期。

希望对我们有所帮助。祝你好运 :)

回答

对于商业应用程序,Windows窗体非常成熟。它提供了一条从自动生成大量内容到允许细粒度控制和滚动自己的路径的温和路径。那里有大量高质量的第三方控件,以及大量的示例,文档等。很难遇到别人没有解决的问题。我强烈建议我们学习Win32的一些背景知识(例如Petzold),因为WinForms框架始终以此为基础。

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

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

回答

为了让我们轻松掌握"事件驱动"的本质,基本上所有框架都是围绕FLTK创建的。

这是一些快速入门视频链接

对于专业用途,我会推荐Qt,价格昂贵,但在商业场合通常值得。

回答

因为我们已经熟悉C和C ++,所以我建议我们学习如何使用Charles Petzold的书来编写简单的Windows GUI应用程序。它将使我们对Windows的工作原理有基本的了解。很高兴理解我们看到的大多数内容都是一个窗口(例如,一个按钮是一个窗口),并且这些窗口都可以响应消息。不过,我不会花很多时间,如果我们要选择WPF,则不必一定要先这样做。我只是认为对此有一个基本的了解是一件好事。

最近在.Net Rocks上有一个很好的播客,名为" Kate Gregory在C ++中为Vista开发!"。在那儿,她建议从现在开始的人不要使用/学习MFC(即使它是最近更新的)。

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

回答

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

回答

有很多在线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少一些令人生畏且and肿。