我有用C和C++编写控制台和网络客户端/服务器应用程序的经验,但我对使用win32 visual API、MFC、Qt、wxWidgets等几乎一无所知。从哪里开始是一个好的起点,我应该专注于什么方法,以便为未来做好准备和健壮?
发布于 2008-08-07 11:24:55
这是一个相当宽泛的问题,因为在Windows中编写GUI应用程序有很多种方法。
开发任何图形用户界面应用程序都有两个主要部分:API/framework.和语言考虑到您对学习构建Windows GUI应用程序很感兴趣,因此该语言并不是您真正关注的重点。因此,您应该选择一种您已经知道的语言,并使用您选择的语言可以利用的框架或API。
如果你想使用C语言,你几乎被限制在自己处理Win32应用程序接口,在这种情况下,阅读Petzold或Richter将是一个很好的起点。imho应用程序接口可能会让人望而生畏,但这是值得努力学习的( Win32 )。网上有很多关于Win32的教程,还有MSDN,里面有完整的Win32应用编程接口的参考/指南。确保您不仅涵盖了应用程序接口,还涵盖了其他区域,例如资源/对话框,因为它们是Win32应用程序的构建块。
如果你想使用C++,你有使用C时的所有选项,再加上一些其他的选项。我建议直接使用GTK,然后转到已知的框架,如Win32、Qt、wxWindows或GTK,这样您就可以花更少的时间处理样板代码,而不是专注于编写应用程序逻辑。我刚刚列出的最后3个选项都有跨平台的额外好处,所以你不必太担心特定于平台的问题。既然您说过希望使用Windows,那么我假设您热衷于此,而不是跨平台--所以使用MFC,但首先要花一些时间使用Win32 API来熟悉其中的一些概念。
在处理MFC和MFC应用程序接口时,最好在编写代码之前对术语有一个扎实的理解。例如,您需要了解message pump是什么,以及它是如何工作的。您需要了解"owner-drawn控件“和subclassing等概念。当你理解了这些(以及更多),你会发现使用MFC变得更容易了,因为它在它的类接口中使用了类似的术语(例如。在理解如何以及何时使用PreTranslateMessage之前,您需要知道“翻译消息”是什么意思。
您也可以使用托管C++来编写.NET图形用户界面应用程序,但我在一些地方看到,托管C++实际上并不打算以这种方式使用。相反,它应该用作本机/非托管代码和托管代码之间的网关。如果您正在使用.NET,最好使用VB.NET或C#等.NET语言来构建您的GUI。
因此,如果您打算使用.NET,您目前可以选择WinForms库或WPF。我个人认为,考虑到WPF就是为了取代它而设计的,那么你就是在浪费时间去构建WinForms应用程序。随着时间的推移,WPF将变得更加流行,而Winforms很可能会消亡。WPF有一个更丰富的API集,并且不会受到Winforms的许多限制。然而,如果您真的选择了这条路,您无疑将不得不学习XAML,这是一种驱动WPF应用程序的标记语言。这项技术正在成熟,有很多很好的地方可以学习它。首先,像LearnWPF和DrWPF这样的网站上有一些非常棒的文章。其次,在topic上有quality books的plenty。
因此,总而言之,一旦你选择了你的语言和技术,道路实际上是相当容易的。只需拿起一两本书,读一些博客,研究一些代码示例..最重要的是..。编写代码。坚持写作,不断犯错,不断从中学习。
作为最后的说明..。
换句话说,
就是Silverlight。如果你不想走微软路线,你可以试试Adobe的Flash/Flex,请看。Silverlight和Flash/Flex都构建了RIA,我认为这就是我们的发展方向。像应用一样的Office时代屈指可数了
我一点也不同意。Silverlight与WPF不同。Silverlight是特定于web的,只有WPF功能的一个子集。考虑到问题要求Windows GUI应用程序,Flash/Flex富互联网应用程序并不是一个合适的建议。我也不同意富客户端应用程序(如office)的时代屈指可数。
我希望这能有所帮助。祝你好运:)
发布于 2008-08-07 03:08:36
我不知道我是否应该把它称为一个好的起点,但是如果您想为将来做好准备,请看一下windows presentation foundation,它完全是为windows的图形用户界面编程而构建的
发布于 2008-08-07 03:47:42
我的第一个经验是使用C#和Visual Studio编写简单的图形界面应用程序。GUI构建界面是一个简单的拖放操作,它根据潜在的用户操作生成框架方法。我只用它做了相当基本的编程,但我想这将是一个开始学习基础知识并随着时间的推移扩展到更高级功能的绝佳起点。
https://stackoverflow.com/questions/4347
复制相似问题