Windows GUI编程 - C + SDK或C# + Windows Forms

4
我是一名有丰富服务器代码经验的C程序员(AIX,HPUX,一些Linux),我需要为Windows(2000,XP,Vista,7)编写一个GUI程序,其中需要CAD类绘图功能和大量数据输入表格(这是一款专业的工程应用程序)。多年前,我使用Gupta SQLwindows(现在是Centura Builder)编写了一些Win32代码。老板们已经下令必须使用编译代码。据我所知,C + SDK可以胜任此工作,但需要相当大的努力,而C#+ Windows Forms则更加强大,但我对.Net框架的要求有些担忧。
根据您的经验,您会建议什么?
如果使用.Net,应该选择哪个版本?2.0,3.0,3.5?

1
感谢所有回复的人。你们的评论为我们指明了前进的道路。目前正在研究WPF和Windows表单两种技术。我发现后者更加清晰易懂。至于XAML,我还不是很确定。对Jay Michaud的详细回复表示赞赏。 - CyberFonic
7个回答

5
我不熟悉Centura Builder,所以不确定您之前的Windows编程经验是在什么抽象层次上。如果您选择使用C/C++和Win32进行本机代码路线,请确保购买Charles Petzold的Programming Windows。阅读本书的前几章可以帮助您决定是否也要选择本机代码路线。
如果您选择.NET Framework和C#,并且如果您不需要版本3.5特定的功能(例如用于数据库访问的LINQ),我建议选择版本3.0。它是Windows Vista上的内置组件,因此您不必将运行时程序与程序安装程序一起打包,除非您必须支持Windows XP(您可能需要,所以不要介意:)。使用版本3.0,您可以获得Windows Presentation Foundation(用于替代或与Windows Forms一起使用),它可以为您提供许多图形功能而不需要太多的努力。我不熟悉CAD,因此不知道WPF是否提供您需要的绘图功能,但它可能为您编写自己的绘图例程提供了一个很好的平台。

编辑:我在第一次阅读时错过了您对Windows版本的要求,特别是对Windows 2000的要求。我想你得选择.NET Framework 2.0和Windows表单。但我必须问一下:通过升级工程师的八年旧机器到更快、更新的设备,从而摆脱对Windows 2000的支持要求,是否更具有成本效益,提高他们的生产力呢?


如果我理解情况正确的话,我可以请求将XP作为最低支持版本。此外,.Net 3.0似乎可配置为XP。我拿了几本关于Windows Forms和WPF的Apres书籍,并深入研究了一些例子。 - CyberFonic

3
如果您选择使用.NET,您将需要使用.NET 2.0,因为.NET 3.0及以上版本仅支持Windows XP及以上版本(Vista、7、2003、2008)。
个人认为,不必过分担心.NET框架的要求。这是每台计算机上只需安装一次的程序,如果需要,可以通过Windows更新进行简化。

1

如果你不想用.NET,Qt + C++ 绝对是一条好路;它肯定比C和Win32更优秀。虽然.NET仍然允许比Qt更快的开发速度,但Qt的优势在于快速且易于部署(无需.NET要求),并使可移植性更加容易(如果您想将其移植到Linux或Mac上)。


1

如果你必须使用本地代码,我强烈建议使用 Codegear / Embarcadero 的RAD Studio。它是一个与 Delphi(从 Turbo Pascal 发展而来的面向对象语言)和 C++ Builder 一起发行的工作室产品。如果你已经熟悉 C/C++,那么学习它会非常简单。两种语言共享的 Visual Component Library 是可扩展、强大且快速应用开发环境。

如果您能够使用托管代码,则 C# 与 Winforms 易于使用,WPF 可能是长期更好的界面选择,但需要花费更多时间进行学习。


0
根据类似CAD图纸的复杂性要求,我会选择C# + Windows Forms,甚至更喜欢C# + WPF。
使用WPF比在GDI中尝试绘制图形要更加干净许多。特别是如果要进行一些3D“画图”,因为您可以直接在WPF中做很多(简单的)3D对象。与直接使用Windows API(或MFC)以C/C++编写GUI程序相比,使用C#将使您的GUI编程更具生产力。
个人而言,我认为.NET要求最小,但这真的取决于您组织中的权力机构...

WPF需要.NET 3.0,而.NET 3.0需要WinXP或更高版本,因此WPF不支持Windows 2000(因为OP需要Windows 2000支持)。 - Ray

0
如果必须使用编译代码,我建议使用MFC的WTL,但是使用C# + WinForms或WPF会更快(在开发成本方面)。

请注意,WTL与MFC没有任何依赖或关联,除了相似的API。因此,如果您选择WTL,就不会有比使用C + Win32 API更多的依赖项。但是,您仍应该使用.NET UI框架 :) - Skrymsli

0

你可以用 C 或 C++ / Win32 api 做任何事情
(在 MSDN 中有类似 CAD 绘图的 Win32 示例...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接