C语言学习问题

我学过谭浩强的C语言书,他全书里面写的程序都是在黑窗口里执行的,很难看。。。我知道C语言也能写一些界面的程序
所以现在想要学习一下用C语言写一些界面的方法
但是我找不到这类教材
请各位谁知道这方面的教材的给我介绍一下吧!
我喜欢一次只干好一件事,所以我暂时不打算学习C++或者C#,所以请各位以C语言作考虑

呵呵.... 在知道这么几年了,程序设计区是不是就会有些勤奋又好奇的孩子来问这个问题“如何用C/C++写出有按钮和界面的程序啊?”

以下是我的个人经验,就当抛砖引玉了希望对楼主有用。

另外不是我说楼上的几位,初学者再接触到这个问题时很容易被误导,作为一个过来人,我希望楼主能从基本原理开始学习再接触MFC之类的AFrm。

我大二的时候也是被这个问题困扰了好久,从进入计算机系就期待学习编程,可是编程课开了才发现,老师讲的这个语言那个库,编出来的程序和我们平时在电脑上用的有按钮有文本框有图片的程序根本不一样嘛,编出来的都是DOS一样的黑框程序,一股被骗了的感觉。

于是就跟你现在一样开始摸索,可惜那时候还没有百度知道什么的,想搜索也无从下手,后来终于从各种各样的资料中拼凑出了一点知识,原来我想要编写的那种有按钮有对话框的程序,就是所谓基于GUI的程序。

GUI- Graphic User Interface --图形用户界面,是和只有main函数的控制台程序完在交互方式上完全不同的。控制台程序--也就是你说的黑窗口,完全通过输出字符、输入字符的方式和用户进行交互,而GUI,则使用各种图形化的控件来接受输入和产生输出,这些控件就包括按钮、文本框、输入框、甚至图片、视频和声音等等。

那么,怎么使用我们熟悉的C语言真正去写这样一个基于GUI的程序呢?首先很遗憾,C语言本身,也就是C语言的语法元素和标准库,并不提供对GUI的支持,也就是说你无法使用C语言和stdio或者stdlib写出一个有“对话框”的程序...至于C为什么不提供GUI,原因很多也很有道理,这里我就不细说了。那么要写出GUI程序,就必须有第三方提供的库。

很幸运的是,我们常用的Windows操作系统理所应当的为我们提供了GUI库,这个库可以通过简单的包含<windows.h>来进行使用,而这个库本身的代码,则放在Windows最核心的一个文件里:user32.dll(所以这是一个动态链接库),不光我们可以使用这个现成的GUI库,事实上,你所看到的绝大多数在Windows下运行的程序都使用了user32.dll,包括微软自己的visual stdio等等。

说到了User32.dll就不得不提一下另一个重要概念,那就是API,Application Programming Interface,API是操作系统或其他程序提供给编程人员的一个接口,使用这个接口能够“命令”操作系统做一些事情。在Windows中为例,如果你想通过资源管理器去查看某个文件,就可以使用Windows提供给你的文件API,如果想在屏幕上绘制图形,则使用Windows的图形API(也就是微软的GDI),那么我现在想写一个有“窗口、对话框、按钮”的程序呢?当然有现成的生成窗口、对话框等控件的API供我们使用了。

具体的WindowsAPI可以很容易查到,但是其总数非常多(你可以想想,像Windows这样庞大的一个操作系统,需要给我们提供多少函数才能描述他的各种功能)这里是W32API手册:http://www.eshuba.com/soft/795.htm

如果要开始你的第一个WindowsAPI写成的窗口程序,这里有一个适合初学者的例子:http://webservices.ctocio.com.cn/net/357/9344857.shtml
你可能发现效果和你想象的还有差距,而且很多东西看不懂(HINSTANCE是啥东西?LPTSTR什么意思?)记住,万事开头难,尤其是Windows这样复杂的东西。

这个程序运行后你会看到一个啥也没有的窗口,一运行就弹出一个Windows下常见的对话框,显示一句hello world,怎样,不是黑框了吧?但是估计还是很没有成就感...好简单是吧?记住,再复杂的程序,都是在这样简单的一个框架基础上构架起来的。

其中的
MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK);
这一句,就是调用了Windows提供的一个函数(WinAPI),该函数的作用也很简单:弹出一个普通的消息框,第一个参数为该消息框标题,第二个为显示的内容,第三个是图标类型,第四个是这个消息框提供哪些按钮。(长久不用winAPI了,如果记错了请谅)

除了简单的消息框,Windows程序常见的按钮、文本框等等,微软都帮我们做好了并且提供了相应的API供我们使用,举个简单的例子:
hwndButton = CreateWindow(
"BUTTON", // predefined class
"OK", // button text
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
// Size and position values are given explicitly, because
// the CW_USEDEFAULT constant gives zero values for buttons.
10, // starting x position
10, // starting y position
100, // button width
100, // button height
hwnd, // parent window
NULL, // No menu
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // pointer not needed

看起来很唬人吧?这条语句创建了一个按钮,参数很多但是实现的功能很简单。其他的东西你可以类推。

讲到这里,我就只能点到为之了,因为一个健全的窗口程序,最起码应该有一个消息循环,来捕捉用户的鼠标移动、鼠标点击、键盘输入等等,才能实现真正的GUI功能,这些远不是我一个帖子能够说清的,楼主想要了解的话可以看看这里:http://crdate.com/Article/34471.html
呵呵,很好的菜鸟入门站,我当年就没有这些资源啊...

接下来,先不说深度了,(实在说不完),说说广度吧。

你可能注意到了,我之前说的这些窗口程序都输入所谓的Windows窗口程序设计,因为你使用了Windows系统提供的GUI,那么自然地,这些程序只能在Windows平台上运行,并且回去动态链接user32.dll或者kernel32.dll等存放着WindowsAPI具体实现代码的库。因此这些程序在Linux下是无法运行的。

除了最最常见的WindowsGUI,在Linux下我们还有很多选择,比如GTK,这是另外一套GUI,也会为你提供对话框、按钮等等的控件,但是他们的外观就和Windows下的完全不同啦。类似的还有Java的图形界面库Swing等等。

熟悉了WIndowsAPI之后,很多人会感叹,使用WinAPI写程序太麻烦太复杂,所有的消息要用户自己处理,控件要单独维护,尤其麻烦的是,WinAPI不是面向对象的。

于是乎,微软乘着C++的东风,推出了能够以面向对象方式编写WIndows窗口程序的另一大套类库,也就是楼上某同学所提到的:MFC(Microsoft Fundation Class libray),在MFC中,一个窗口也好,一个按钮也好都是属于某个类的对象,其使用方式、消息处理和事件处理方式远比直接使用WIndowsAPI方便。但其实在底层,这些MFC提供的类还是在调用WinAPI.

MFC从VC6.0开始就和微软的VS系列捆绑在一起,你可以直接使用VS的新建项目向导建立“MFC项目”。

等到了这一步,相信你就可以基本熟练地写出“非黑框”程序了。
但是记住,GUI只是程序的型,算法、业务流和数据结构才是程序的神。现在你也许觉得“图形程序”看起来比黑框程序要“高级”,其实很多运算复杂、任务繁重的程序反而更偏向使用控制台程序,因为从健壮性上来说,控制台程序远强于GUI程序,更重要的原因是,一旦使用GUI,势必依赖某个GUI库(因为C本身不含GUI),则会影响程序移植性。

在嵌入式领域、密集计算领域等,选择黑框程序更加明智。而明显注重用户体验的程序,则GUI更加重要。

...呼,写完~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-17
要编写MFC应用程序最好还是学习c++或才c#
我的群号是1133763
第2个回答  2010-01-17
Vsual C# .NET 我现在也在学!觉得还可以!
第3个回答  2010-01-17
通过调用 WINDOWS API完全可以写出WINDOWS系统下的GUI界面应用程序,只是复杂度太高了,另外,也可以用GTK库来写GUI界面,它本来是LINUX下的东西,但是也有WINDOWS版本的.
第4个回答  2010-01-17
vc。我现在正在学习!
要编写界面必须用vc。而且vc是c的 升级 速度快很多,容易编写界面(这是我刚学的时候人家跟我说的,其实我也才学了不到1周)

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网