如何在C语言中进行图形界面编程?

84

我希望用C语言进行图形编程。我找了很多关于提供GUI编程丰富函数集的编译器,但是没有找到合适的。

基本上,我想绘制按钮,然后接受用户的选择并采取相应的操作。如果您可以建议一个C编译器或者可以添加到我的编译器中的库,那会很有帮助。我正在使用Windows操作系统。

目前,我正在使用不支持直接创建按钮方法的TURBO C编译器。任何帮助都将不胜感激。


73
停止使用TURBO C,开始使用现代编译器。 - David Heffernan
6个回答

163
这与编译器完全无关。所有编译器所做的都是编译它们所接收到的代码。您需要的是一个GUI库,可以使用任何编译器编写针对它的代码。
当然,话虽如此,你首要任务应该是放弃Turbo C。这个编译器已经大约20年了,继续使用它对你毫无好处。您无法编写现代GUI应用程序,因为它只会产生16位代码。所有现代操作系统都是32位的,许多现在是64位的。值得注意的是,64位的Windows版本将不会本地运行16位应用程序。你需要一个模拟器;如果你只能编写在DOS模拟器中运行的应用程序,那么这不会真正引起多少成就感。:-)
微软的Visual Studio Express C++ 可作为免费下载。它包括与套件完整版中提供的相同编译器。C++包还可以编译纯C代码。
既然你在Windows上工作,那么Windows API自然是一个很好的选择。它允许您编写本机Windows应用程序并访问完整的GUI控件集。您可以在这里找到一个关于用C编写WinAPI应用程序的不错教程。如果您选择使用Visual Studio,它还包括一份空白WinAPI应用程序的样板代码,可以让您快速上手。
如果您真的在意学习这个,Charles Petzold的Programming Windows是该主题的权威资源,绝对值得一读。整个Windows API都是用C编写的,完全可以用C编写功能齐全的Windows应用程序。您不需要任何糟糕的C++。

至少我会这样做。正如其他答案所建议的那样,GTK 也是一个选择。但是它生成的应用程序在 Windows 上看起来非常难看。


编辑:看起来你不是唯一想使用过时编译器编写“GUI”应用程序的人。在谷歌搜索中可以找到以下库:TurboGUI:适用于 Turbo C/C++ 的 GUI 框架:

 TurboGUI interface sample

如果你必须使用 Turbo C,这可能是一个选择。


7
@Algorithmist: 我建议使用Visual Studio,它是一个自带Microsoft编译器的集成开发环境。其中Express版(包括与专业版相同的编译器)可以免费下载。请查看我的回答获取链接。MinGW是另一个选择。它是将GCC移植到Windows的版本。虽然我从未使用过这些工具,但Visual Studio是我在Windows上进行C和C ++开发的首选环境。如果您有兴趣探索该领域的其他Windows C编译器,可以在Stack Overflow上找到相关问题。 - Cody Gray
@Algorithmist 我使用配置了Netbeans的Cygwin。请查看http://netbeans.org/community/releases/60/cpp-setup-instructions.html。你还有另一个选择,就是使用配置了MinGW的Eclipse...请查看http://www.banym.de/eclipse/install-eclipse-cdt-on-windows-7。 - AurA
@Algorithmist,我在Windows上使用gcc只需安装GOW(Gnu On Windows),它比Cygwin更轻便。 - Willy satrio nugroho

21

创建C语言GUI界面最著名的库无疑是GTK

使用该库可以轻松创建按钮(例如)。当用户单击按钮时,会发出信号,您可以编写处理程序执行一些操作。


1
我看到的问题是旧的Turbo C编译器。不确定它和周围的库是否足够更新以处理gtk构建。 - AndreasT
10
创建 C 语言 GUI 的最著名库无疑是GTK。也许在你的世界里,它是最著名的。我一直认为 Win32 更为人知。 - David Heffernan
4
"我一直认为Win32更为人所知。" --- 你的想法没错。Win32以其可移植性而广泛闻名。 - Daniel
在 MacBook 上编译 GTK 真是个噩梦。 - Samie Bencherif

8

C是一种更多用于硬件编程的语言,有许多易于使用的GUI构建工具,如GTK、Glade等。问题在于制作一个C程序并不难,制作一个GUI也不难,但将两者结合起来,即在程序和GUI之间进行接口,则非常麻烦,不同的GUI使用不同的方式,有些通过全局变量,有些使用插槽。如果有一个GUI构建工具可以轻松地绑定您的C程序变量和输出,那就太好了。当你克服了内存分配和指针时,CLI编程很容易,而GUI则可以使用拖放式IDE。但总的来说,我认为它可能会更简单。


8
在你的主函数中使用win APIs:
  1. RegisterClassEx() 注意:您需要提供一个指向处理窗口消息(例如WM_CREATE,WM_COMMAND等)的函数(通常称为WndProc)的指针。
  2. CreateWindowEx()
  3. ShowWindow()
  4. UpdateWindow()
然后编写另一个函数来处理win的消息(在#1中提到)。当您收到WM_CREATE消息时,您需要调用CreateWindow()。类是控制该窗口的内容,例如“edit”是文本框,“button”是按钮 :). 您必须为每个控件指定一个ID(您可以自行选择,但在所有控件中必须唯一)。 CreateWindow()返回该控件的句柄,需要记忆。当用户单击控件时,您将收到带有该控件ID的WM_COMMAND消息。在此处,您可以处理该事件。您可能会发现SetWindowText()GetWindowText()很有用,它允许您设置/获取任何控件的文本。
您只需要win32 SDK即可。您可以从这里获取它。

1
需要Windows SDK。在这里下载它(http://msdn.microsoft.com/en-us/windows/bb980924.aspx)。 (它包含在Visual Studio中。如果您想使用其他编译器,则需要单独下载它。) - Cody Gray
@Cody Gray:忘记了,可能是包含在我的masm32设置中。 :) 我会添加到我的答案中。 - BlackBear

5

C语言编译器本身不会提供GUI功能,但有许多库可供使用。最流行的可能是GTK+,但如果您刚开始学习并想快速创建GUI,则可能有点复杂。

对于更简单的东西,我建议使用IUP。使用它,您可以使用一个名为LED的简单GUI定义语言来布局控件(但如果您想这样做,也可以使用纯C)。


我现在无法感谢你推荐IUP,因为过去6天我一直在使用GTK并且毫无进展,让我非常苦恼。 - person the human

5
如果您想自己构建所有内容,可以使用Windows API和Windows SDK(或)Windows API和Visual C Express。获取2008版本,这是微软为Windows开发推出的一个完整的IDE和非常优秀的软件。
所有操作系统都是用C语言编写的。因此,您用C语言编写的任何应用程序、控制台/GUI都是编写操作系统的标准方式。

6
考虑到创建它所花费的资金量,结果相当平凡。 - Evgeni Sergeev

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