欢迎来到咨信网! | 成为共赢成为共赢 咨信网助力知识提升 | 自信网络旗下运营:咨信网 自信AI创作助手 自信AI导航
咨信网
全部分类
  • 包罗万象   教育专区 >
  • 品牌综合   考试专区 >
  • 管理财经   行业资料 >
  • 环境建筑   通信科技 >
  • 法律文献   文学艺术 >
  • 学术论文   百科休闲 >
  • 应用文书   研究报告 >
  • ImageVerifierCode 换一换
    首页 咨信网 > 资源分类 > PDF文档下载
    分享到微信 分享到微博 分享到QQ空间

    C语言到底能干什么(用C写QQ).pdf

    • 资源ID:228716       资源大小:4.05MB        全文页数:125页
    • 资源格式: PDF        下载积分:19金币
    微信登录下载
    验证码下载 游客一键下载
    账号登录下载
    三方登录下载: QQ登录
    二维码
    微信扫一扫登录
    下载资源需要19金币
    邮箱/手机:
    验证码: 获取验证码
    温馨提示:
    支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    VIP下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    特别提醒    |    会员权益      免费领取5元金币
    1、推荐 2345浏览器】、 【 WPS办公】、填表 下载求助】 、 【 索取发票】 、 【 退款申请 】 、咨询 微信客服】、【 QQ客服】、【客服电话:4008-655-100 | 投诉/维权电话:4009-655-100】。
    2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
    6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    7、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

    C语言到底能干什么(用C写QQ).pdf

    1、C语言究竟能干什么序言鉴于现在已经大三了,很多同学很迷茫,自己学的东西到底能做什么,将来 自己到底能干什么?我不想看着同学迷茫的面孔,特别是几个好兄弟,有几个想学习编程,但又苦苦找不到门路的兄弟,所以 想写点东西,希望对大家又点略微的帮助,以尽兄弟我的微薄之力。很多同学学了 C语言之后,可能难免会有所感叹:这就是C语言!总是感 觉C语言竟然能写出Wind ows、Linux?为了解除同学们的疑惑,也愿为同学们指点编程之道吧。我写的这些东西采用C语言,计划通过编程实例来讲解C编程的一些知识,让大家对C能又更深一层的理解和认识。当然,大家不要指望看了这些之后会写出一个操作系统来,但是我想,如果你认

    2、真看了的话,写一个类似与QQ的聊天程序应该不难。本来书是假期里照顾妈妈时写的,原想是1、不让自己的水平停滞不 前,温故知新(两个月的假期是很长的)2.帮助一些同学,解决编程上的困惑3.希望妈妈快点康复4.让母亲和家里人知道自己一直都很努力,我是好样的但现在母亲已经能够不在了,所以第三点,就改为原母亲在天之灵得 到慰藉,早日放下烦恼,不用惦记我们。C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基 本的数据类型、数据结构、语法,然后就是一些数值计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且页没有多少实用价 值。本书以实用实例作为编程指导,指引大家编写真正实用的程序。了解到大家

    3、 对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。基于大家基本都用Wind ows XP SP3,我也就在这个系统上把程序调试成功后再给大家讲解。编程环境,我还是喜欢Visual C+6.0本书计划从四个大的方面来讲,这四个方面是:窗口类、文件操作类、网络类、数据库类。都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。第一章窗口类程序的编写这一章就先来讲解下窗口类程序的编写。因为现在程序没有界面,就像人没 有脸面一样,而且好的界面更能吸引人。从基本的界面开始,相信能给大家 指明出一条路的,使大家很容易地掌握

    4、窗口序的编写。其实界面设计利用 VC 6.0的M FC,很容易地制作出来。这里从底层开始写代码来写界面程序,使大家知道一些底层的东西,为以后学习打下好的基础,相信您学了这些,再用VC的M FC会得心应手的。1.1用C写的第一个一个窗口程序作为编程的开始,我们还是以一个He ll。World来开始我们的学习之旅。代码如下:#includ e void main()printf(He llo World!,1);这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不 过这里估计还有些人,到现在还不知道#由日111中的头文件std io.h到底是什么东西,我就来说下了,std io.h是一

    5、个文本文件,存在于磁盘上的,已VC为例它的位置如下图:也许你听说过printf()函数是在std io.h中预定义的,但是你见过其定义的形式没有,没有且看下图STDIO.H-记事本oo文件(E)编辑(玲格式(Q)查看(匕帮助(由CRT IMP CRUMPCRTIMP int cripcl FsppkfFTI F*_ 1nnn.inti:CRTIMP lo 二CRTI MP si查找*);查找内容国):printf_CRTIMP in_CRTIMP inZcRTiriP in二区分大小写 向上也)向下也)_CRTIMP ch_CRTIMP int _uuecx _yt?Lwir iLt;CRUM

    6、P uoid _cdecl perror(const char*);OOI,FILE 查找下一个但)取消int _cdecl _pclose(FILE*);FILE*cdecl popen(const char*,const char*);CRT IMPint_cdecl球const char*,_);CRUMPint_cdeclputc(int,FILE*);其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后 我会慢慢解释给大家的。函数是先定义才能使用的,所以std io.h中定义printf函数,我我们在引用了 std io.h头文件后就可以在程序中调用printf函

    7、数了。上面是在命令行中显示一个“He ll。World!”,没什么意思,下面我写一个窗口程序,显示个 He llo World!#includ e void main()(M e ssage Box(NULL,He llo World!”,我的第一个窗口程序”,M B_O K);)编译运行后如下图:弹出的是一个对话框,上面有He llo World,还有一个标题和一个“确定”按钮。当然你会说这对话框也算个窗口吗?这里肯定的告诉你:是的,对话框是窗口程序 的一个子集。你可能还会这样问,这样一个简单的窗口有啥用呢,其实这样的窗口 非常有用,我们在操作计算机的时候,会出现一些警告或提示的对话框,都是

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

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

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

    11、inM ain()这个函数原型是这样的int WINAPI WinMain(HIN8TANCE hlnstance,HIN8TANCE hPrevInstance,LPSTRIpCmdLine,int nCmdShow);大家是不是感觉这个函数挺复杂的,有这么几个参数,而像main好像就没有参数。其实main是有参数,这个向锋和小四是知道了的。但是main函数的 参数是可以省略的,而WinMain是不可以省的。这里也要对VC 6.0的编译模式改下看下图常规I调试I qc+连接资力 分类:席观一输出文件名:|Debug/Cpp1.exe对象鹿模块:el32.lib user32.lib gdi3

    12、2.lib wins|文件g编辑也)Cppl-Microsoft Visual C+|窗|信口廓的电司二!设置活动工程9插入9 II工程9 蛆建 工具(!)窗口世)帮助X dJ-Configuration:Cpp1-Win32 DebugLinking_LIBCD.lib(crtO.obj):error LNK2001:unresolued externa:in/Rnn1;fatal I 7n1 口=口1叱。p乂)组建/迸:茬侔洋置表 广注受库2单查我心结第广狗niarn onV产生调试信息 厂忽略全“增加链接 厂产生Mr允许配置文件工程选项网:nsolejj/pdb/Uebug/CppT.p

    13、db11/debug/mach/out:Debug/Cpp1.exe/pdbtype:sept确定 依次 是“工程”一“设置”一“连接”,在“工程选项”里把console改为 windows就可以了。如果认真学了汇编,或是手写命令编译连接过C程序,就 会知道这是干什么的。Console是控制台的意思,以前我们用mian函数写的 程序都是以控制台模式连接的,所以很少会有界面的。现在我们要写有界面的 程序,所以要选Windows(窗口)模式了。我们写入以下代码,并按照上面说的方法去做,看看结果#include windows.hint WINAPI WinMain(HIN8TANCE hlnsta

    14、nce,HIN8TANCE hPrelnstance,LP8TR IpCmdLine,int nShowCmd)(MessageBox(NULL,WinMain 创建的窗口程序”,“WLMairT,MB_OK);return 0;)结果如下图:M e ssage Box(NULL,H He llo World!”,我的第一个窗口程序”,M B_O K);与第一节中的这段代码代码比较下#includ e“wind ows.h void main()M e ssage Box(NULL,He llo World!”,我的第一个窗口程序”,M BJDK);两者比较下,后者多了个cmd窗口。可见用ma

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

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

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

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

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

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

    21、如果是NULL,则此对话框不属于任 何一个窗口。IpText对话框窗口的显示内容。IpCaption 对话框窗口的标题。Type对话框的样式和动作(像是确定按钮,还是取消按钮就是设置这里 的)关于这个函数的细节可以看这里http:insdn.microsoft.coin/en-es/libran/ms645505(VS.85).aspx到此为止,你也算是会了窗口程序的编写,但只是一个开始,不过这 已经很好,可能会让你感觉到了 C的魅力,也可能会稍微解点C语言能干什么 的疑惑。在开始写代码之前,我有必要把细节和原理先说明下。Windows下一个窗口创建的过程有以下几个步骤:1.程序创建一个窗口,

    22、首先要向 Windows系统注册一个窗口类 wndclassex,其实就是定义一个变量,变量的类型是WNDCLASSEX(结 构体)。该结构体的定义与介绍看这里(http:msdn.inicrosoft.coin/en-us/librars/ins633577(VS.85).aspx),type d e f struct UINT cbSize;UINT style;WNDPRO C IpfnWnd Proc;int cbC lsExtra;int cbWnd Extra;HINSTANC E hlnstance;HIC O N hlcon;HC URSO R hC ursor;HBRUSH

    23、hbrBackground;LPC TSTR IpszM e nuName;LPC TSTR IpszC lassName;HIC O N hlconSm;WNDC LASSEX,*PWNDC LASSEX;成员介绍cbSize 值为 size of(WNDC LASSEX),在调用 Ge tC lassInfoEx 前必须 要先设置它值。style窗口类的样式,它的值可以是窗口样式值的任意组合。可以有以下的值IpfnWndProc 指向窗口处理函数(回调函数)。处理窗口事件,像单 击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。cbCIsExtra为窗口类的额外信息做记录,系统初始化为0。

    24、cbWndExtra记录窗口实例的额外信息,系统初始为0.如果程序使用 WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设 置为 DLGWINDOWEXTRAhlcon窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口 提供一个默认的图标。hCursor窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为 NULL,系统提供一个默认的鼠标样式。hbrBackground窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值 COLOR_ACTI VEBORDER COLOR_ACTI VECAPTI ON COLOR_AP

    25、PWORK8PACE COLOR_BACKGROUND COLOR_BTNFACE COLOR BTN8HADOW COLOR_BTNTEXT COLOR_CAPTI ONTEXT COLOR_GRAYTEXT COLOR_HIGHLIGHT COLOR_HI GHLIGHTTEXT COLOR_I NACTI VEBORDER COLOR_I NACTI VECAPTI ON COLOR_MENU COLOR_MENUTEXT COLOR_SCROLLBAR COLOR_WINDOW COLOR_WI NDOWFRAME COLOR_WI NDOWTEXTIpszMenuName 指向一个以

    26、NULL结尾的字符床,同目录资源的名字 一样。如果使用整型id表示菜单,可以用MAKEINTRE8OURCE定义 一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。IpszClassName 窗口类的名字,字符串类型。hlconSm 小图标的句柄,在任务栏显示的图标,可以和上面的那个一 样。定义一个WNDCLASSEX类型变量后,在给变量成员初始化后,我们就可以用RegisterWindowEx(&wndclassex)来注册这个窗 口类了。这个注册过程,就和我们平常创建一个项目一样,都要先注册才能创建。2.创建窗口这一步很简单,就是利用CreateWindowEx()函数来

    27、创建就是了。CreateWindowEx函数的原型如下:HWND C re ate Wind owEx(DWO RD dwExStyle,LPC TSTR IpClassName,LPC TSTR IpWindowName,DWO RD dwStyle,int x,int y,int nW id th,int nHeight,HWND hWndParent,HM ENU hMenu,HINSTANC E/iInstance,LPVO ID IpParam);参数说明dwExStyle:指定窗口的扩展风格。该参数可以是下列值:WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽

    28、文件。W8_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。W8_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。W8_EX_CONTEXTHELP:在窗口的标题条包含一个问号W8_EX_CONTROLPARENT:允许用户使用Tab键在窗 口的子窗口间搜索。W8_EX_DLGMODALFRAME:仓U建一个带双边的窗口;该窗口可以在dwStyle中指定W8_CAPTION风格来创建一个标题栏。W8_EX_LEFT:窗口具有左对齐属性,这是缺省设置的。W8_EX_LEFT8CROLLBAR:如果外壳语言是如 Hebrew,Arabic,或其他支持reading o

    29、rder alignment的语言,则标题条(如果 存在)则在客户区的左部分。若是其他语言,在该风格被忽略并且不作 为错误处理。W8_EX_LTRREADING:窗口文本以 LEFT 到 RIGHT(自左向右)属性的顺序显示。这是缺省设置的。W8_EX_MDICHILD:创建一个 MD 子窗口。W8_EX_N0PATARENTN0TIFY:指明以这个风格仓U建的 窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。W8_EX_0VERLAPPED:W8_EX_CLIENTEDGEW8_EX_WIND0WEDGE 的组合。W8_EX_PALETTEWIND0W:W8_EX_WIN

    30、D0WEDGE,W8_EX_T00LWIND0W 和 W8_WX_T0PM0ST 风格的组合 W8_EX_RIG HT:窗口具有普通的右对齐属性,这依赖于窗口类。W8_EX_RIGHT8CR0LLBAR:垂直滚动条在窗口的右边 界。这是缺省设置的。W8_EX_RTLREADING:如果外壳语言是如 Hebrew,Ar abic,或其他支持读顺序对齐(reading order alignment)的语言,则窗口 文本是一自左向右)RIGHT至U LEFT顺序的读出顺序。W8_EX_8TATICEDGE:为不接受用户输入的项创建一个3一维边界风格W8_EX_T00LWID0W:创建工具窗口,即窗

    31、口是一个游 动的工具条。W8_EX_T0PM0ST:指明以该风格创建的窗口应放置在所有非最高层 窗口的上面并且停留在其L,即使窗口未被激活。使用函数 SetWindowPos来设置和移去这个风格。W8_EX_TRAN8PARENT:指定以这个风格仓U建的窗口在窗口下的同属窗口已重画时丁该窗口才可以重画。由于其下的同属富日已被重画,该窗口是透明的。IpCIassName:窗口类的名字。IpWindowName:指向一个指定窗口名的空结束的字符串指针。其实就 是窗口的名字。dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加 上说明部分的控制风格。x:窗口的横坐标。y:窗口的竖坐

    32、标。nWidth:窗口的宽度。nHeight:窗口的高度。hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。hlnstance:与窗口相关联的模块事例的句柄。IpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息 返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回 值为NULL。若想获得更多错误信息,请调用GetLastError函数。3.显示窗口显示窗口就是更简单的事情了。连个函数轻松搞定,第一个函数就是ShowWindow(),原型如下:BO O L ShowWind ow(HWND力物d 当前的窗口句柄int nCmdShow/可见状态);因为C re

    33、 ate Wind owEx函数创建的窗口是在内存中的,并没有显示到 显示器上,用ShowWind ow()函数,设定窗口的可见状态,并把数据从内存中 移动到显卡上,以便显示。第二个函数就是Upd ate Wind ow();函数原型:BOOL UpdateWindow(HWND hWnd);描述:这个UpdateWindow函数通过发送重绘消息 WM_PAINT给目标窗体来更新目标窗体客户区的无效区域。如果那个窗体的无效区域没 有,就不发送重绘消息WM_PAINT 了。注意了,这个API函数是直 接发送消息WM_PAINT给目标窗体的,没有进入过消息队列。函数参数:hWnd 一个要更新的窗体

    34、的句柄函数返回值:如果函数调用成功,返回值为非零值。如果函数调用不成功,返回值为零。经过这三步后,一个窗口就实现了,就创建了出来,难不,也真够 难的,Windows想的正周到,把创建过程的每一个细节都给想到了,每 毫秒可能发生的事情都想到了,难怪Windows那么贵,还不开源。也 算是人间的产品嘛,费的心血可真不少呀。说难其实也不难,创建一个 窗口程序也就三步:一注册,二创建,三显示。很容易就ok 了。这T 他妈容易了吧。原来就是这些的,我想我已经说的挺明白的了,如果你有什么疑惑,可以给 我发由R件()下面我们就按照上面所说的来编程实现一个窗口:ttinclud e 回调函数LRESULT W

    35、INAPI WinProc(HWND hWnd,UINT M sg,WPARAM wParam,LPARAM IP ar am)(switch(M sg)/处理消息过程,什么是消息,下节再讲(case DESTRO Y:响应鼠标单击关闭按钮事件PostQuitM e ssage(0);退出消息队列,至于什么是消息队列,下节说re turn 0;/退出函数re turn De fWind owProc(hWnd,M sg,wParam,1Param);主函数int WINAPI WinM ain(HINSTANC E hlnstance,HINSTANC E hPre vInstance,LPS

    36、TR IpC md Line,int nShowC md)(char*cName 二 myWind ow;WNDC LASSEX wc;HWND hWnd;M SG M sg;wc.cbC lsExtra=0;wc.cbWnd Extra=0;wc.cbSize=size of(WNDC LASSEX);wc.hbrBackground=(HBRUSH)Ge tStockO b je ct(WHITE_BRUSH);通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的wc.hC ursor=NULL;不设置wc.hlcon=NULL;不设置wc.hlconSm=NULL;不设置

    37、wc.hlnstance=hlnstance;当前程序的句柄,hlnstance是有系统给 传递的wc.IpfnWnd Proc二WinProc;窗口处理过程的回调函数。wc.IpszC lassName 二(LPSTR)cName;窗口类的名字。wc.IpszM e nuName=NULL;目录名,不设置wc.style=C S_HREDRAW|C S_VREDRAW;Re giste rC lassEx(&wc);在系统中注册hWnd=C re ate Wind owEx(WS_EX_C LIENTEDGE,cName,我的窗口我喜欢,WS_O VERLAPPEDWINDO W,200,1

    38、00,600,400,NULL,NULL,hlnstance,NULL);/创建窗 口,窗口 标题为我的窗口我喜欢if(hWnd=NULL)容错处理M e ssage Box(NULL,“The re s an Error”,Eiror Title,/,M B_IC 0NE XC LAM ATIO N|M B_O K);re turn 0;)ShowWind ow(hWnd,nShowC md);显示窗口Upd ate Wind ow(hWnd);下面是对消息的循环处理,大家先不必管这些,下节课我会细说的while(Ge tM e ssage(&M sg,NULL,0,0)(Translate

    39、 M e ssage(&M sg);翻译消息DispatchM e ssage(&M sg);分派消息)re turn M sg.me ssage;哎,这一节,篇幅可是真有点长的,看完估计得换几口气吧,但是只要你看到了这些,你的水平就立马上了一个档次。想你看完后也许会头昏脑胀的,没有再看下去的信心的,但是估计当你把我的代码复制到VC中编译运行后,看到一个可爱的窗口时,肯定又会重新点燃你心中学习的热情吧,因为你已 经看到了成功,看到了成就,一种成就感犹然自心中生,自信也提起来了,这比什么都好,人嘛就得对自己充满信心的。所以大家要发扬持之以恒的精 神,坚持和我一起把这段苦闷的入门过程给走完,那么编

    40、程就不再是痛苦,而是一种乐趣。其实写这些程序很多东西都不用去记的想WNDC LASSEX结构 的成员及成员作用,这些都不用去死记,只要知道有这么个东西,到时时再 查就可以了,编程用到的函数、结构体那么多,谁想记呀。这一节已经留下 了些问题,在下节介绍的,大家如果有余力的话,可以先查下资料的。1.4 鼠标指针特效大家在都玩过网络游戏吧,里面的界面都是很吸引人的,好的界面的确能给 人以美的感受。而里面的鼠标并不是我们平常见到的箭头了,而是独具匠心 的。网游我就只玩过魔域,所以就以魔域为例,魔域中的鼠标是这样的Q。今天我们就来实现让鼠标到程序窗口上就变为我们想要的图案。在写代码之前,我们还是先来看下

    41、先驱知识,这里要说的就是上节说资源了,当时大家看了可能并不知道什么是资源,这里就详细说一下。大家知道Wind ows程序都有图标,鼠标有光标,窗口上有图片、按钮、文 字等等,这些都是程序的部分,这样就是程序的资源。程序没有进入内存运 行的时候,我们就叫它可执行文件吧,在磁盘保存的时候,并不只是保存了 程序运行的代码部分(即cpu指令部分),还有一些图片、字符、按钮、图 标并不是在代码段的。可执行文件的大致机构如下图-其他的信息-可执行文件头部资源部分_/可执行部分可执行文件一个可执行文件是很复杂的,这里就简单的画这么一个难看的图,知道资 源所在的大概位置,能理解程序的执行部分和知道程序的图标是

    42、从哪来的就 可以了。今天我们只是修改鼠标的指针,所以用到的资源,只有鼠标的光标资源而 已。资源的源文件是以rc为扩展名的脚本文件(仍然是C语言格式的,很 简单),有资源编译器Rc.e xe编译成以re s为扩展名的二进制资源文件,最后用连接器,把re s文件和obj文件连接到一起就成了我们的程序e xe文 件了,现在知道了程序编译后要连接了吧。光标的图片格式有两中cur和ani 的。这个文件我在魔域的图片库里面找到了就复制到,当前项目目录下。下面来定义下资源文件myO wnC ursor.rc/myO wnC ursor.rc writte n by xhk 2009.3.1ttinclud

    43、e 资源文件要用到的图文件ttd e fine C UR 0 x1000 定义资源的ID,为整型idC URC URSO R myO wnC ursor.ani 用到的光标图案写完后,在命令提示符下进入目录,然后用rc.e xe编译,输入rcmyO wnC ursor.rc 命令,回车O1 C:WINDOWSsystem32cmd.exe|口|x|Microsoft Windows XP 5.1.2600 版权所有 1985-2001 Microsoft Corp.二C:Documents and Settingsxhk.51F80E656D4C4E7cd c:C:testrc nyOwnCu

    44、rsor.rcC:test_我们查看下项目目录下多了个myO wnC ursor.RES的文件,就是编译生成的二进制资源件。接下来就该编写代码了,来应用这个资源文件,建立myO wnC ursor.c文件,其实代码和上节所写代码很相似的,只是稍微加以修改而已。ttinclud e d e fine C UR 0 x1000 预定义光标的 id回调函数LRESULT WINAPI WinProc(HWND hWnd,UINT M sg,WPARAM wParam,LPARAM1Param)(switch(M sg)处理消息过程,什么是消息,下节再讲case WM _DESTRO Y:响应鼠标单击

    45、关闭按钮事件PostQuitM e ssage(O);退出消息队列,至于什么是消息队列,下节说re turn 0;/退出函数re turn De fWind owProc(hWnd,M sg,wParam,1Param);)主函数int WINAPI WinM ain(HINSTANC E hlnstance,HINSTANC EhPre vInstance,LPSTR IpC md Line,int nShowC md)(char*cName 二 myWind ow;WNDC LASSEX wc;HWND hWnd;M SG M sg;wc.cbC lsExtra=0;wc.cbWnd Ex

    46、tra=0;wc.cbSize=size of(WNDC LASSEX);wc.hbrBackground 二(HBRUSH)Ge tStockO bje ct(WHITE BRUSH);通 过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的wc.hC ursor=Load C ursor(hlnstance,M AKEINTRESO URC E(C UR);/这里改了,来载入光标资源wc.hlcon=NULL;不设置wc.hlconSm=NULL;不设置wc.hlnstance=hlnstance;当前程序的句柄,hlnstance 是有系 统给传递的wc.IpfnWnd P

    47、roc=WinProc;窗口处理过程的回调函数。wc.IpszC lassName 二(LPSTR)cName;窗 口类的名字。wc.IpszM e nuName=NULL;目录名,不设置wc.style=C S_HREDRAW|C S_VREDRAW;Re giste rC lassEx(&wc);在系统中注册hWnd=C re ate Wind owEx(WS_EX_C L I ENTEDGE,cName,我的窗口 我喜欢,WS_O VERLAPPEDWINDO W,200,100,600,4 00,NULL,NULL,hlnstance,NULL);创建窗口,窗 口标题为我的窗口我喜欢i

    48、f(hWnd-NULL)容错处理M e ssage Box(NULL,,/The re,s an Error,Z/ErrorTitle,M B_IC O NEXC LAM ATIO N|M B_0K);re turn 0;ShowWind ow(hWnd,nShowC md);显示窗口Upd ate Wind ow(hWnd);下面是对消息的循环处理,大家先不必管这些,下节课我会细说的 while(Ge tM e ssage(&M sg,NULL,0,0)(Translate M e ssage(&M sg);翻译消息DispatchM e ssage(&M sg);分派消息re turn M

    49、 sg.me ssage;用 vc 编译生成 myO wnC ursor.obj,把 myO wnC ursor.obj 和myO wnC ursor.re s放到同一个文件夹下,然后在命令行下进入它们所在的目录,输入命令:linke ke rne l3 2.lib use r3 2.lib gd i3 2,lib/subsyste m:wind ows myO wnC ursor.obj myO wnC ursor.re s 才巴两个文件连接成 myO wnC ursor.e xe.运行后界面如下;r-我的窗口我喜欢看到了吧,当鼠标移入窗口的时候,光标就变成了那个手型图案了,这 和魔域的是一

    50、样的。到现在想想一个特效又咋地,不还是一句一句代码写出 来的,而特效和普通程序往往只有数据代码不同而已。网络游戏的界面很好 看,也只不过是资源文件用的比较多而已,而且计算量很大,所以网游总是 很占内存的,因为图片一、声音文件都很大,而且变换比较多、快,就比较占 用资源了。其实再好的程序,只要有了思路,就能写出来,而且写出来也难的,是不 是,今天大家应该会有点收获了,都会设计个性的鼠标光标了,比起以前学 习C的东西,应该有一种层次感了吧。这些东西都比较接近系统了,所以学 了之后,你对Wind ows系统也会有很深的了解的。如果各位看官看到本节还 有兴趣继续看下去,那么这对小人就是一种支持,小人在


    注意事项

    本文(C语言到底能干什么(用C写QQ).pdf)为本站上传会员【曲****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表




    页脚通栏广告
    关于我们 - 网站声明 - 诚招英才 - 文档分销 - 服务填表 - 联系我们 - 成长足迹

    Copyright ©2010-2024   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:4008-655-100    投诉/维权电话:4009-655-100   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-2024(办理中)    



    关注我们 :gzh.png  weibo.png  LOFTER.png