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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(Windows下的C和C++编程免费文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Windows下的C和C++编程免费文档格式.docx

1、填写文件,这里是Hello World,下面是工程的存放路径;最后,选择OK。(见图1-4)图1-4工程的存放路径这样,就在刚才的空工程中加入了一个文件,可以在Vc的FileView框中看到它,右边是它的编辑框,在那里编写源程序。(见图1-5)图1-5Vc的编辑框那么,加入如下代码:#includeint WINAPI WinMain ( HINSTANCE hInstance ,HINSTANCE hPrevInstance , LPSTR lpcmdLine ,int nCmdShow) MessageBox ( NULL , TEXT(Hello World!) TEXT(My 1st

2、Program) , MB_OK) ; return 0 ;然后,选择执行,或者直接按F5键。就会得到如下的执行结果:一个弹出的对话框(见图1-6)。图1-6 Hello World弹出框3)程序分析和TC程序比较,这个Windows程序基本相同。包含了头文件,有一个主函数,在主函数中调用了一个系统函数,主函数返回一个整数值。每个语句以分号结束,复合语句用大括号包含。下面对它进行详细的分析。4)程序的参数下面,对上面的程序的参数从上至下进行分析。 #include程序包含了一个头文件windows.h ,基本上所有的Windows程序都会包含这个文件。它定义了Windows的基本数据类型、数据

3、结构、系统函数等。 int WINAPI WinMain Tc中的程序是以main函数为程序入口的,而Windows程序是以WinMain函数为入口的,这个函数的定义如下:第一个参数hInstance是当前实例句柄,为一个整数,用于标识窗口、程序等。第二个参数hPrevInstance 被置为NULL。第三个参数lpcmdLine是运行程序的命令行。第四个参数nCmdShow用于指定程序窗口最初的显示模式,可以在初始是指定是正常还是最大化等。WinMain函数返回一个整数。WINAPI用于指定调用约定,具体在WINDEH.H中定义。 MessageBox MessageBox是一个Window

4、s API函数,用于弹出一个对话框,显示一些简短的信息。定义如下: 第一个参数hWnd是一个窗口句柄,表明对话框所属的窗口。第二个参数lpText是一个字符串,表明需要显示的信息。TEXT是一个宏。第三个参数lpCaption是一个字符串,表明对话框的标题。第四个参数uType用于指定对话框中的按钮和图标。(见表1-1)各种按钮和图标类型可以同时使用,用“ | ”连接,如“MB_OK | MB_ERROR” 。类型按钮图标MB_OK确定-MB_OKCANCEL确定和取消MB_YESNO是和否MB_INFORMATION提示MB_WARNING警告MB_ERROR出错表1-1按钮和图标 Wind

5、ows应用程序1)真正的Hello World上一节中,实现了Windows弹出一个对话框,显示了一个简短的信息“Hello World”。但是,这和平时看到的大多数Windows应用程序不太一样,没有窗口,没有最大化、最小化按钮等。虽然如此,它还是相当重要的,特别在显示出错或提示信息时尤为简便。下面,来看一看一个真正的Windows窗口程序。同样,创建一个新的工程,这里是Hello World Windows(见图1-7):图1-7Hello World Windows工程然后加入一个新的C源文件(其实可以看成是C源文件,只是换了后缀名),文件名为Win Hello World。下面是程序的

6、代码。LRESULT CALLBACK WndProc (HWND , UINT , WPARAM , LPARAM ) ; HINSTANCE hPrevInstance, LPSTR lpcmdLine , int nCmdShow) static TCHAR szAppName = TEXT( HelloWorld ) ; static TCHAR szClassName = TEXT( HelloWorldClass ); HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass. style = CS_HREDRAW | CS_VREDRA

7、W ; wndclass. lpfnWndProc = WndProc ; wndclass. cbClsExtra = 0 ; wndclass. cbWndExtra = 0 ; wndclass. hInstance = hInstance ; wndclass. hIcon = LoadIcon ( NULL , IDI_APPLICATION) ; wndclass. hCursor = LoadCursor ( NULL , IDC_ARROW) ; wndclass.hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH )

8、 ; wndclass. LpszMenuName = NULL ; wndclass. lpszClassName = szClassName; if ( ! RegisterClass ( & wndclass ) ) MessageBox ( NULL , TEXT ( This programrequires Windows NT !) , szAppName , MB_ICONERROR ) ; return 0 ; hwnd = CreateWindow ( szClassName ,My Hello World to Windows Program) , WS_OVERLAPPE

9、DWINDOW , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT ,CW_USEDEFAULT , NULL ,NULL , hInstance , NULL ) ; ShowWindow (hwnd , nCmdShow ) ; UpdateWindow ( hwnd ) ; while ( GetMessage ( & msg , NULL , 0 , 0 ) ) TranslateMessage ( &msg ) ; DispatchMessage ( &msg) ; return msg. wParam ;LRESULT CALLBACK

10、WndProc ( HWND hwnd , UINT message ,WPARAM wParam , LPARAM lParam ) HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch ( message ) case WM_CREATE :MessageBox( NULL , HelloWorld! , Hello World , MB_OK) ; MessageBeep ( MB_OK ) ; return 0 ; case WM_PAINT:hdc = BeginPaint ( hwnd , &ps ) ;GetClientRect ( hwnd

11、 , &rect ) ;DrawText ( hdc , TEXT ( Hello , Windows !-1 , &rect ,DT_SINGLELINE | DT_CENTER| DT_VCENTER) ; EndPaint ( hwnd , & case WM_DESTROY : PostQuitMessage ( 0 ) ; return DefWindowProc ( hwnd , message , wParam , lParam ) ;运行这个程序,将得到如下结果:首先弹出一个对话框,并且伴随一个很熟悉的“当”的一声(见图1-8):图1-8 Hello World弹出框2点击确定

12、以后,关闭这个对话框,打开了一个Windows窗口(见图1-9):图1-9 Windows窗口这个窗口大家因该很熟悉了吧。一个标准的Windows窗口,可以最大化、最小化、拖动等。好,接下来仔细分析一下整个程序的代码。当然,没有必要去记住这些所有的代码,基本上也没有人记得住,以后在使用的时候,可以直接复制过去,然后作相应的修改就行了。2) Windows类在程序分析之前,先说明一些基本的新的东西。 数据类型在这里,出现了一些在TC中没有见过的数据类型。这些是Windows程序的一些常见数据类型。基本上,它们的命名与相应的英文含义相同,或是在前面加上表示类型的字母,如32位的类型加上L,不过部分

13、因为Windows版本的变迁而失去了原来的意义,只是沿用以前的名字。详细的说明以后会慢慢熟悉,下面列举了一些常用的前缀和表达的意义(见表1-2):前缀表示的数据类型ccharbyBYTE (无符号字符)nshortx、yint (表示x坐标和y坐标)cx、cyint (表示x方向长度,y方向长度)wWORDlLONGppointer (指针)szstring ended with zero (以0结尾的字符串)sstringdwDWORDfnFunction (函数)bBOOL (int)表1-2常用的前缀 函数这里,除了MessageBox之外,还有一些Windows API函数,下面列表说

14、明(见表1-3):API函数作用LoadIcon加载程序图标LoadCursor加载鼠标GetStockObject获取图形设备对象RegisterClass注册窗口类CreateWindow创建窗口ShowWindows显示窗口UpdateWindow刷新窗口GetMessage从消息队列中获取消息TranslateMessage转换消息DispatchMessage发送消息MessageBeep发出系统声音BeginPaint开始在用户区绘制GetClientRect取得用户区DrawText显示文本EndPaint结束绘制PostQuitMessage插入推出消息DefWindowPro

15、c执行缺省的消息处理表1-3 Windows API函数好,现在来看看Windows类。Windows窗口类规定了窗口的一些基本特征,如显示方式、名称、风格等等。创建的窗口是属于窗口类的一个具体的实例,由窗口类可以创建多个窗口。就像房子的窗户一样,窗户类定义了窗户是用来采光、通风的、有一个外框、可以用一些材料封闭等;而窗户就是一个个窗户类的实例,当然,窗户有很多种,但是它们的基本特征就是上面所说得。就像在房子上开一个窗户要准备一些材料、工具一样,在创建一个Windows窗口之前有一系列准备工作,要为窗口注册一个窗口类,告诉Windows希望创建一个什么样的窗口。RegisterClass函数用

16、于注册窗口类,它的定义如下:如果调用成功,返回一个非零值,ATOM数据类型保证其返回的值在系统中是唯一的;调用失败,返回零。RegisterClass函数的参数只有一个,是一个指向WNDCLASS数据类型的指针,WNDCLASS数据类型是一个结构,Windows有一个通用的定义:typedef struct _WNDCLASS UNIT style ; WNDPROC lpfnWndProc ; Int cbClsExtra ; Int cbWndExtra ; HINSTANCE hInstance ; HICON hIcon ; HCURSOR hCursor ; HBRUSH hbrBa

17、ckground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName ; WNDCLASS ;看到这里大家因该想到些什么了吧。对了!在创建窗口之前要注册窗口,在注册窗口之前,就是要填充上面这个结构。下面,一项项看: 首先,定义了一个WNDCLASS结构:WNDCLASS wndclass ;下面就填充这个结构 wndclass. style = CS_HREDRAW | CS_VREDRAW ;表示当窗口的水平方向或垂直方向的大小发生变化时,完全刷新窗口,这使得Hello , Windows !一直位于窗口的正中心。 wndclass. lpfnWndPr

18、oc = WndProc ;设置窗口函数为WndProc。这个函数处理窗口里的所有消息。 wndclass. cbClsExtra = 0 ;目前不使用,设为0 。 wndclass. cbWndExtra = 0 ; wndclass. hInstance = hInstance ;程序的句柄,也就是标识。 wndclass. hIcon = LoadIcon ( NULL , IDI_APPLICATION) ;设置图标,就是程序的图标,比如Windows记事本的图标就是一个小的翻开的记事本。 wndclass. hCursor = LoadCursor ( NULL , IDC_ARRO

19、W) ;设置鼠标,比如说游戏中的鼠标往往是不同形状的。 wndclass.hbrBackground = 指定窗口背景色。 wndclass. LpszMenuName = NULL ;指定窗口菜单,置为NULL表示不需要菜单。 wndclass. lpszClassName = szClassName;指定一个类名。 填充完这个结构后,就要注册窗口,而且要对返回值进行检验:if ( ! 注册成功,就可以创建窗口了。3)创建窗口好了,既然决定了窗户的样子,就可以照着作了。当然,还要决定窗户的位置等信息,这只要调用CreateWindows函数就可以了:hwnd = CreateWindow (

20、 szClassName , CW_USEDEFAULT , NULL ,这里,CreateWindow函数又出现了11个参数,来看看这些参数有些什么作用(见表1-4),表中的参数从上至下的对应上面CreateWindow函数的参数顺序:参数szClassName字符串,表示窗口类名称)字符串,用于显示窗口标题栏中的字WS_OVERLAPPEDWINDOW显示风格CW_USEDEFAULT窗口左上x坐标,这里用默认值窗口左上y坐标,这里用默认值窗口右下x坐标,这里用默认值窗口右下y坐标,这里用默认值NULL父窗口句柄,NULL表示最高级菜单句柄,NULL表示没有hInstance应用程序实例句

21、柄创建参数,这里置为NULL表1-4 CreateWindow函数参数这里说明一下,WS_OVERLAPPEDWINDOW是标准窗口风格,包括一个标题栏、窗口图标、窗口标题、最小化按钮、最大化按钮、关闭按钮、可调边框。下面是WS_OVERLAPPEDWINDOW的定义。define WS_OVERLAPPEDWINDOW(WS_OPVERLAPPED |WS_CAPTION |WS_SYSMENU |WS_THICKFRAME |WS_MINIMIZEBOX |WS_MAXIMIZEBOX )CreateWindows函数创建个窗口,系统为这个窗口分配一定的资源,下一步就是在屏幕下显示了,也就

22、是调用ShowWindow 函数:ShowWindow (hwnd , nCmdShow ) ;函数的第一个参数hwnd表示窗口的句柄,也就是这个窗口在系统中的唯一标识。第二个参数nCmdShow是显示参数,用以指定窗口初始化时的状态,决定是最小化、最大化还是常规显示。如果要自己设置初始状态,可以参照下面的表来进行(见表1-5):SW_SHOWNORMAL按常规显示窗口并激活SW_SHOWMAXIMIZED最大化显示窗口并激活SW_ SHOWMINIMIZED最小化显示窗口并激活SW_SHOWMININOACTIVE最小化显示窗口,不激活表1-5 nCmdShow显示参数接下来,调用Updat

23、eWindow函数,通过窗口函数WndProc进行窗口的绘制:UpdateWindow ( hwnd ) ;4)主循环在UpdateWindow ( hwnd ) 语句之后,有一段循环语句,这就是Windows程序的消息循环。在这里,指定了Windows程序从消息队列中取数据的方式和事件与消息的转换方式。所谓的消息循环可以这样理解:比如说,有时当连续按键盘时,屏幕上并不是同步显示,而是有一段时间延迟。消息循环就是当触发一定的事件时(比如按键盘),主循环将它转换成消息,也就是Windows可以识别的信息,放入消息队列,等待系统以一定的方式进行读取。下面的代码就是负责接受消息,并进行转换和发送,真

24、正处理消息的函数稍后说明。while ( GetMessage ( &GetMessage有4个参数,用一个表格来说明它们的作用(见表1-6):说明msgMSG类型,就是Windows消息结构窗口句柄,NULL表示接受自己创建窗口的所用消息提取消息的最小索引值,常与下一个参数同时置0提取消息的最大索引值,置0表示提取所用消息表1-6 GetMessage参数GetMessage ( & msg , NULL , 0 , 0 )语句有一个返回值,当不为WM_QUIT (退出)时返回一个非零值,这时while 循环为1,执行内部的语句;为WM_QUIT时返回一个零值,于是跳出while 循环,执行推出程序。当GetMessage返回一个非零值时,执行while 循环内的语句,将消息传给Windows,进行转换:TranslateMessage ( &并由Windows发送到窗口函数,在这个程序中是WndProc函数:DispatchMessage ( &所有的流程可以通过下面的图来表示(见图1-10):图1-10 Windows程序流程5)事件处理好,现在清楚了WinMain函数的工作流程,那就进入到窗口函数中,看看WndProc函数。从上面的流程图可以看出,这里,窗口函数处理所用的Windows消息,也就是说,这将是程序的核心,而WinMain函数仅仅是搭建了一个基本的框架。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1