ImageVerifierCode 换一换
格式:DOCX , 页数:96 ,大小:660.99KB ,
资源ID:1516743      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1516743.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C 语言究竟能干什么Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

C 语言究竟能干什么Word文档下载推荐.docx

1、 #include void main() printf(Hello World!); 这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不过这里估计还有些人,到现在还不知道#include 中的头文件stdio.h到底是什么东西,我就来说下了,stdio.h是一个文本文件,存在于磁盘上的,已VC为例它的位置如下图:也许你听说过printf()函数是在stdio.h中预定义的,但是你见过其定义的形式没有,没有且看下图其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后我会慢慢解释给大家的。函数是先定义才能使用的,所以stdio.h中定义printf函数,我我们在

2、引用了stdio.h头文件后就可以在程序中调用printf函数了。上面是在命令行中显示一个“Hello World!”,没什么意思,下面我写一个窗口程序,显示个Hello World!#include void main() MessageBox(NULL, Hello World!,我的第一个窗口程序,MB_OK);编译运行后如下图:弹出的是一个对话框,上面有Hello World,还有一个标题和一个“确定”按钮。当然你会说这对话框也算个窗口吗?这里肯定的告诉你:是的,对话框是窗口程序的一个子集。你可能还会这样问,这样一个简单的窗口有啥用呢,其实这样的窗口非常有用,我们在操作计算机的时候,会

3、出现一些警告或提示的对话框,都是基本是这种方法写出来的。就算是这个很简单,学习本来不就是有易向难,有浅显深奥去的过程吗。整个效果几乎就是靠一个函数MessageBox的功劳。这里也先不介绍这个函数了,说些其他的。其实用C编写一些恶程序,就是把编程环境中所提供的一些函数熟悉了基本就可以了。用VC来写成序,其中的头文件有很多,定义了很多Windows API 函数 、数据结构、宏,可以让我们大家运用,通过它们,我们可以快速开发出使用的程序。这些Windows API在微软的MSDN上查,上面有很多说明,部分还有代码示例。不会是可以输入函数名,查找相关信息,建议大家用英文版的Library,因为其内

4、容比中文版的全面,英语不好的同学呢,就先看中文了中文MSDN:英文MSDN:到这里,我们就完成第一个有界面程序的编写,你感觉写有界面的程序难吗?显然不难。下面看一个向锋和波波感兴趣的程序:九九乘法采用命令行形式#include “stdio.h”int i=0,j=0;for(i=1;i10;i+) for(j=1;ji+1;j+) printf(“%d*%d=%d t”,j,i,j*i); printf(“n”);和那个javascript效果都是一样的,所以语言只要学好一样,其他的就很容易旁通的,学习就捡一种学好,不要贪多。好的,这一节就这样吧,大家先各自了解下微软的MSDN,对以后的学习

5、会有很大的帮助的。1.2 第一个真正的窗口程序上一节中,我们用MessageBox函数轻松地实现了一个对话框窗口,可能你会说,那仅仅是个没有用的对话框而已,是的,只是对话框而已。我之所以以一个对话框为例呢,是因为我只是想让你知道写一个有界面的程序并不是件难办的事。明白了这一点后,我们继续。今天来编写一个真正的窗口程序。下面就该罗嗦一段了,由于大家以前并没有写过什么窗口程序,写的都是命令行下的,我们知道在命令行下的程序都有一个主函数main,这个函数也就是程序的入口函数。我们现在用VC 6.0来写,而且要写窗口类程序,VC 6.0给我们提供了一个专门用作窗口类程序的入口函数WinMain()这个

6、函数原型是这样的int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTRlpCmdLine, int nCmdShow大家是不是感觉这个函数挺复杂的,有这么几个参数,而像main好像就没有参数。其实main是有参数,这个向锋和小四是知道了的。但是main函数的参数是可以省略的,而WinMain是不可以省的。这里也要对VC 6.0的编译模式改下看下图依次 是“工程”“设置”“连接”,在“工程选项”里把console改为windows就可以了。如果认真学了汇编,或是手写命令编译连接过C程序,就会知道这是干什么的。C

7、onsole是控制台的意思,以前我们用mian函数写的程序都是以控制台模式连接的,所以很少会有界面的。现在我们要写有界面的程序,所以要选Windows(窗口)模式了。我们写入以下代码,并按照上面说的方法去做,看看结果#include windows.hint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd)WinMain创建的窗口程序WinMain return 0;结果如下图:与第一节中的这段代码代码比较下#include “windows.h”两者比较下,后者

8、多了个cmd窗口。可见用main写的并没有完全脱离命令行呀。所以以后我们写窗口程序就用winmain了。好了,转过来,我们来看看WinMain()函数,其中有4个参数先看下解释(看不明白得先看完):hInstance:应用程序当前事例的句柄。hPrelnstance:应用程序的先事例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32的位程序,该参数总为NULL。lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参看GetCommandLine。nCmdShow:指明窗口如何显示(是隐藏还是显示,有没有最大化按钮之类的

9、)。取值可以参考MSDN这里我相信有一个词大家好应该比较陌生,句柄(HANDLE)是吧。下面我就来简单的说下句柄其实就是Windows系统中一个东西的唯一标识。就是系统中有很多运行的程序或者资源之类的,为了更好的管理使用,Windows系统给它们每人一个ID一样。懂得网页制作的人应该知道网页中各个元素的ID吧,网页的ID如果重复话可能出现错误。那么系统的句柄会不会有相同的,那是肯定不会有的了,就和我们的学号一样,系统自动分配每一个模块的句柄,是不会相同的了。对于句柄大家可以先这样理解着,不用一下子搞懂得。以后学着学着就明白了。估计大家对那几个参数的类型改犯迷糊了吧。其实那几个类型,并不是什么新

10、类型,都是Windows开发人员为了自己和他人编程方便,同过基本的C语言语法定义一种新的结构体,或者是共同体,再者就是枚举类型。我知道结构体、共同体和枚举类型,很多老师是没有讲到的,因为在书的后边,很多教C的,又是很垃圾的老师,所以不会讲那么快的。其实结构体这些数据类型,就是通过我们常用的字符、整型、浮点等数据类型构造一个比较复杂的类型而已,举个例子,就是我们知道C没有一个数据类型可以描述一个人吧,那么我构造一个是不是很方便我们编程呢。我们可以这样构造一个struct People int age;/年龄 char sex2;/性别 int height;/身高我们这样定义以后就可以在我们以后

11、的程序中利用这个数据类型了,People zhangsan;把zhangsan的身高172放到zhangsan.height中。这样可以方便完成很多工作。所以结构体是很简单的,还有其他的复杂数据类型也是很简单的,都是有常用的简单的类型来结合到一起构造一个复杂的而已。这和JAVA定义类是很相似的,java定义个人类,不是可以这样的public class People public int age; public string sex; public height; 看起来都差不多,而且用法也很相像。唯一的差别其实就是类可以有方法,而结构体是没有的(经过特殊处理也是可以的,这里不用考虑)。上面是

12、为了让大家了解下复杂数据类型的定义,罗嗦了一大堆。下面来看下WinMain中第一个参数的类型HINSTANCE这个只是个结构体而已,实际上和HANDLE这个类型差不多,但是有一点差别,而HANDLE是这样typedef PVOID HANDLE;定义的,PVOID是什么呢,我们来看下typedef void *PVOID;说明PVOID是一个指针,初始指向空(void)。因此可以知道句柄也是个指针而已。看着这么复杂原来也只是指针。这些都可以在微软的msdn上查得到的,而且很详细的那个第二个LPSTR 根据字面上的意思就知道是字符串类型了。查一查果然是。大家一定要利用好msdn,很有用的。本节就

13、到此结束了,主要是说明了一个WinMain函数和结构体的事情,东西也不算太多,大家应该能接受得了吧。下节就来点复杂点深点的东西,希望大家做好心理准备。1.3 窗口程序的编写在来啰嗦之前,希望大家能够做好准备,这一节知识有点多,内容有点长。但愿大家能够一口气读完,如果一口气读不完,那就换口气接着读。 上节中我们用MessageBox()就实现了一个真正的窗口。MessageBox()中的原型如下:Int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);参数解释hWnd 所属对话框所属窗口的句柄,如果是NUL

14、L,则此对话框不属于任何一个窗口。lpText 对话框窗口的显示内容。lpCaption 对话框窗口的标题。uType 对话框的样式和动作(像是确定按钮,还是取消按钮就是设置这里的)关于这个函数的细节可以看这里 到此为止,你也算是会了窗口程序的编写,但只是一个开始,不过这已经很好,可能会让你感觉到了C的魅力,也可能会稍微解点C语言能干什么的疑惑。在开始写代码之前,我有必要把细节和原理先说明下。Windows下一个窗口创建的过程有以下几个步骤:1. 程序创建一个窗口,首先要向Windows系统注册一个窗口类wndclassex,其实就是定义一个变量,变量的类型是WNDCLASSEX(结构体)。该

15、结构体的定义与介绍看这里(typedef struct UINTcbSize;style; WNDPROClpfnWndProc; intcbClsExtra;cbWndExtra; HINSTANCEhInstance; HICONhIcon; HCURSORhCursor; HBRUSHhbrBackground; LPCTSTRlpszMenuName;lpszClassName;hIconSm; WNDCLASSEX, *PWNDCLASSEX;成员介绍 cbSize 值为sizeof(WNDCLASSEX),在调用GetClassInfoEx前必须要先设置它值。 style 窗口类的

16、样式,它的值可以是窗口样式值的任意组合。 可以有以下的值lpfnWndProc 指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。cbClsExtra 为窗口类的额外信息做记录,系统初始化为0。cbWndExtra 记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRAhIcon 窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠

17、标样式。hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值 COLOR_ACTIVEBORDER COLOR_ACTIVECAPTION COLOR_APPWORKSPACE COLOR_BACKGROUND COLOR_BTNFACE COLOR_BTNSHADOW COLOR_BTNTEXT COLOR_CAPTIONTEXT COLOR_GRAYTEXT COLOR_HIGHLIGHT COLOR_HIGHLIGHTTEXT COLOR_INACTIVEBORDER COLOR_INACTIVECAPTION

18、 COLOR_MENU COLOR_MENUTEXT COLOR_SCROLLBAR COLOR_WINDOW COLOR_WINDOWFRAME COLOR_WINDOWTEXT lpszMenuName 指向一个以NULL结尾的字符床,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。lpszClassName 窗口类的名字,字符串类型。hIconSm 小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。定义一个WNDCLASSEX类型变量后,在给变量成员初始化后,我们就可以用Re

19、gisterWindowEx(&wndclassex)来注册这个窗口类了。这个注册过程,就和我们平常创建一个项目一样,都要先注册才能创建 。2. 创建窗口这一步很简单,就是利用CreateWindowEx()函数来创建就是了。CreateWindowEx函数的原型如下:HWNDCreateWindowEx(DWORDdwExStyle,LPCTSTRlpClassName,lpWindowName,dwStyle,intx,y,nWidth,nHeight,hWndParent,HMENUhMenu,HINSTANCEhInstance,LPVOIDlpParam 参数说明 dwExStyle

20、:指定窗口的扩展风格。该参数可以是下列值: WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。 WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。 WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。 WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。 WS_EX_CONTROLPARENT:允许用户使用Tab键在窗口的子窗口间搜索。 WS_EX_DLGMODALFRAME:创建一个带双边的窗口;该窗口可以在dwStyle中指定WS_CAPTION风格来创建一个标题栏。 WS_EX_LEFT:窗口具有左对齐属性,这

21、是缺省设置的。 WS_EX_LEFTSCROLLBAR:如果外壳语言是如Hebrew,Arabic,或其他支持reading order alignment的语言,则标题条(如果存在)则在客户区的左部分。若是其他语言,在该风格被忽略并且不作为错误处理。 WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设置的。 WS_EX_MDICHILD:创建一个MD子窗口。 WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。WS_EX_OVERLAPPED:WS_EX_CL

22、IENTEDGEWS_EX_WINDOWEDGE的组合。 WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW和WS_WX_TOPMOST风格的组合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。 WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading order alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。WS_EX_STATICEDGE:为不接受用

23、户输入的项创建一个3一维边界风格 WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。WS_EX_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。 WS_EX_TRANSPARENT:指定以这个风格创建的窗口在窗口下的同属窗口已重画时,该窗口才可以重画。由于其下的同属富日已被重画,该窗口是透明的。IpClassName: 窗口类的名字。lpWindowName:指向一个指定窗口名的空结束的字符串指针。其实就是窗口的名字。dwStyle:指定创建窗口的风格。该参数可以是

24、下列窗口风格的组合再加上说明部分的控制风格。x:窗口的横坐标。y:窗口的竖坐标。nWidth:窗口的宽度。nHeight:窗口的高度。hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。hlnstance:与窗口相关联的模块事例的句柄。lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。3. 显示窗口显示窗口就是更简单的事情了。连个函数轻松搞定,第一个函数就是ShowWindow(),原型如下: BOOLShowWindow( HWNDh

25、Wnd,/当前的窗口句柄 nCmdShow /可见状态 ); 因为CreateWindowEx函数创建的窗口是在内存中的,并没有显示到显示器上,用ShowWindow()函数,设定窗口的可见状态,并把数据从内存中移动到显卡上,以便显示。 第二个函数就是UpdateWindow(); 函数原型:BOOL UpdateWindow(HWND hWnd);描述:这个 UpdateWindow 函数通过发送重绘消息 WM_PAINT 给目标窗体来更新目标窗体客户区的无效区域。如果那个窗体的无效区域没有,就不发送重绘消息 WM_PAINT 了 。注意了,这个 API 函数是直接发送消息 WM_PAINT 给目标窗体的,没有进入过消息队列。函数参数:hWnd 一个要更新的窗体的句柄函数返回值:如果函数调用成功,返回值为非零值。如果函数调用不成功,返回值为零。经过这三步后,一个窗口就实现了,就创建了出来,难不,也真够难的,Windows想的正周到,把创建过程的每一个细节都给想到了,每毫秒可能发生的事情都想到了,难怪Windows那么贵,还不开源。也算是人间的产品嘛,费的心血可真不少呀。说难其实也不难,创建一个窗口程序也就三步:一注册,二创建,

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2