用c编写GUI编程简介

时间:2009-12-05 12:51:52

标签: c user-interface

我是新的GUI和编程整体,到目前为止,我对c有一个大致的了解,并且花了很多时间编写控制台应用程序。

我正在尝试学习GUI但到目前为止还没有成功。我试过学习wxwidgets(通过官方文档),gtk(通过官方文档)和win32(伪造win32教程),但仍然没有完全到达那里。

我仍然真的想要但似乎找不到任何好材料。 您建议初学者使用什么?

10 个答案:

答案 0 :(得分:15)

如果您严格限制在C,那么您只有几个选择。对于初学者来说,GTK +可能是最简单的。

像C ++这样的面向对象语言更适合GUI编程。如果您喜欢使用C ++,我强烈推荐Qt,主要是因为它非常好的文档,非常好tutorials,特别是初学者。

答案 1 :(得分:5)

我不建议尝试用C做GUI。这样做并不是那么舒服。

但如果你真的想这样做的话。这是关于Windows API的非常好的教程。

您还可以使用像Allegro这样的库,它适用于游戏,但在程序中同样有用。

但我建议的方式是,首先用简单的语言学习GUI和应用程序(这意味着状态机)编程的基础知识(任何简单的做法,个人会建议Lua使用Löve2D平台)。然后使用你在C中获得的知识。如果你必须处理垃圾收集和指针,状态机和事件流将更难掌握......(它仍然可以学习)。

答案 2 :(得分:4)

我建议您应该尝试使用Objective C或C ++等语言正确学习一些面向对象的编程,因为GUI编程很困难。特别是在C中更是如此。

GUI编程中的许多概念都围绕着您了解对象如何工作,以及在任何GUI框架中组成的所有小部件以及它们如何一起交互。还有 events 的概念,它将消息从一个输入源发送到图形组件(或两个图形组件之间)。

总结:当您知道对象的内容时,阅读文档会变得更加容易......即使这样,也有很多内容需要阅读。

答案 3 :(得分:2)

如果你想用C语言学习Windows上的GUI编程,好消息是本机API都是基于C.坏消息是本机API并不是一个清晰和一致的模型。从基于该API构建的OO框架开始,要容易得多。

话虽如此,如果您仍想学习C语言中的Windows GUI编程,最好的选择是Petzold的Programming Windows。它将使用本机API教您一般的Windows编程,包括所有GUI内容。

答案 4 :(得分:2)

我建议将返回转换为gtk +并尝试更多。为什么呢?

因为有很多开源软件可用于使用GUI的gtk +库用C语言编写的Linux和Windows。从GIMP和GnuCash等大型应用程序到较小的工具,您可以阅读源代码,以了解它们如何完成某些功能。他们是否为如何完成某事创造了最好的榜样是另一个问题,但至少你有利于看到工作软件是如何做到的。

此外,gtk +包含glib,这是一个可用于处理常见数据结构和算法的便利工具。因此,您不必花时间实现链接列表和内容,而只需使用库中的那些,并且您的编码时间用于解决您自己的特定难题。

Gtk +文档并不完美,但它很不错。应用开发者也有mailing list

答案 5 :(得分:1)

读一本书只会让你到目前为止。要将其提升到新的水平,您只需要尝试API可以执行的操作。虽然您可以将所有内容都降低到GUI的Win32 API级别,但如果您刚开始只关注尝试不同的技术。

您很快就会发现哪些有效,哪些无效。

如果我推荐一本书,我会推荐一本非技术书籍。

Design Of Everyday Things

接下来是一个视频投稿,关于设计GUI的更多心理概述以及如何让您的用户和您满意。

Business of software - Joel Spolsky

最后一本书,本书将帮助您理解,当您设计应用程序时,人们将通过自己的文化价值观看您的错误决定和选择。因此,为您的应用选择一个错综复杂的设计主题并坚持下去非常重要。

The Culture Code

答案 6 :(得分:1)

要知道的是,GUI不是内置于C中(因为您无疑已经发现)但是通过各种库进行了操作。 wxWindows,qt,gtk,当然VCL也是主要参与者。虽然他们都做了类似的事情,但他们的细节都各不相同。

重要的是要知道如果你要用C ++编程,你可以访问一些面向对象的包装器来访问这些以及可能让你的生活变得更轻松的其他库。 “简单”C有时候被视为“旧学校”,并且支持不是那么“活泼” - 尽管现有的GUI库本身就很优秀。

我建议您浏览网页以获取GUI库的描述和比较,并根据您的个人需求评估您的发现。你的东西只能在Windows上运行,还是你喜欢它跨平台?许可是一个问题吗?你想要小而简单(也许不那么性感)或者你想让GUI结束所有的GUI吗?

选择了获胜者,通过在线教程或示例进行操作。如果你设法得到它的要点并且可以按照所需的风格进行编程,那就抓住一本死树书来深入学习并详细了解它。

答案 7 :(得分:1)

为GTK +1。如果您必须通过自己的选择或项目要求使用C,那么您将比GTK +做得更好。 QT主要是C ++,所以如果C ++还可以,那就是一个选项。但是GTK +的文档并不像开源项目那样糟糕,并且有很多示例代码可供查看。

如果您可以选择切换语言,还有其他选择Cocoa是Mac上优秀的GUI编程环境(我从来没有尝试过Cocoa for windows,但听说过它是可能的。)Objective-C非常适合到GUI编程。

答案 8 :(得分:1)

我建议你也研究一下事件驱动编程。在许多GUI程序中,主程序等待事件(例如鼠标点击)发生然后处理事件。事件驱动编程与顺序执行编程有很大不同。

其他需要研究的主题是多线程和多任务编程。许多GUI对象(小部件)(如按钮)将消息传递给其他对象;或向所有听众广播。消息传递是多线程和多任务编程中的常见过程。

答案 9 :(得分:0)

我建议Cimg library是开源的,并且在2'D图形界面和图像处理中使用完全:

  

CImg Library是一个开源的C ++   用于图像处理的工具包   考虑到这些属性:   实用性CImg定义简单   针对的课程和方法   操纵你的通用图像   自己的C ++代码:加载/保存各种文件   格式,访问像素值,显示,   调整大小/旋转/镜像/过滤,绘制   基元(文本,面孔,曲线,3D   对象,...),计算统计,   管理用户交互,等等......   通用性提供的图像类可以   表示最多4维的数据集   宽(从1D标量信号到3D   高光谱卷),带模板   像素类型。图像集和   序列也受支持。   可移植性CImg是独立的   因此非常便携。它完全   适用于不同的操作系统   (Unix,Windows,MacOS X,* BSD)用   各种C ++编译器(Visual C ++,GNU   g ++,Intel icc,Borland bcc,...)。   简单CImg是轻量级的。它是   由单个头文件CImg.h组成   必须包含在您的C ++中   资源。它只定义了四种不同的   类。它可以使用a编译   最小的标准C ++和系统集   库。不需要异国情调或   复杂的依赖关系。可扩展性     虽然不是必需的,但CImg可以使用   外部功能   工具/库,如ImageMagick,   GraphicsMagick,XMedCon,FFMPEG,   libpng,libjpeg,libtiff,Magick ++,   Lapack,Board,OpenEXR或FFTW3。   而且,一个简单的插件机制   允许任何用户直接增强   根据图书馆的能力   他的需求。 Freedom CImg是免费的,   开源库分布在   CeCILL-C(接近GNU LGPL)   或CeCILL(与GNU兼容   GPL)许可证。它可以用于   商业应用。

This is document for Cimg.