Windows程序设计入门教程_第1页
Windows程序设计入门教程_第2页
Windows程序设计入门教程_第3页
Windows程序设计入门教程_第4页
Windows程序设计入门教程_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Windows程序设计入门教程前骤:1.第一个 windows程序:先讲几个专有名词:HINSTANCE由handle(句柄)和instance (实例)句柄,类似于C中的指针,指向资源,是资源的标识。操作系统要管理和操作这些资源,都是通过句柄(HANDLE)来找到对应的资源。按资源的类型可以分为:窗口句柄HWND实例句柄HINSTANCE图标句柄HICON光标句柄HCURSOR画刷句柄HBRUSH设备内容句柄HDC下面是一个简单的windows程序。Copy to clipboardCODE:#include int WINAPI WinMain(HINSTANCE hInstance,HI

2、NSTANCE hPrevInstance,LPSTR szCmdLine, int iCmdShow)MessageBox (NULL, TEXT (Hello, Windows 98!), TEXT (HelloMsg), 0);return 0 ;WinMain的原函数int WINAPI WinMain (HINSTANCE hlnstance, HINSTANCE hPrevInstance, PSTR szCmdLine, intiCmdShow)这个函数照着原函数写就行。MessageBox的原函数:MessageBox(HWND hWnd, LPCTSTR lpText, LP

3、CTSTR lpCaption, UINT uType)参数解释:hWnd:为窗口句柄,h代指handle句柄lpText:要显示的消息,Ip代指long point长指针lpCaption:消息框的标题uType:消息框的按扭的样式其中lpText和lpCaption的内容可以用TEXT (“”)或直接用(“”)编写自己的窗口:#include一:主函数程序的入口点int WINAPI WinMain()设计窗口类:WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;十个字段wndclasspszClassName=”Lei”;注册窗

4、口类:RegisterClass (&wndclass);创建窗口:HWND hwnd; hwnd=CreateWindow();显示及更新窗口:ShowWindow();UpdateWindow();消息循环:MSG msg;While(GetMessage(&m sg,NULL,O,O)TranlateMessage(&msg);DispatchMessage (&m sg)return msg.wParam;二:消息处理函数操作系统调用LRESULT CALLBACK WndProc() PAINTSTRUCT ps;HDC hdc;RECT rect;switch(message)ca

5、se WM_PAINT: return 0;case WM_DESTORY: return 0;return DefWindowProc();上面只是给出了一个窗口程序的模板块,也就是说一个窗口程序主要由这些组成。由上面我们知,要编出 一个窗口程序,就要经过 设计窗口类、注册窗口类、创建窗口、显示及更新窗口。再通过系统调用WndProc 函数(消息处理函数)来使程序不断运行以及使程序停止。下面我们一个一个完成这些模块。第零大块:程序入口点WinMain函数。照写。第一大块:设计窗口类:窗口依照某一窗口类别建立,窗口类别用以标识处理窗口消息的窗口消息处理程序。先定义wndclass结构。接着初始

6、化这结构的10个字段。WNDCLASS wndclass;wndclass.style = CS_HREDRAW | CS_VREDRAW ;定义窗口类的样式/CS为CLASS和STYLE的第一个字母的缩写wndclass.lpfnWndProc = WndProc ;/Ipfn 代指:指向函数的长指针,fn为function的缩写。/WndProc就是消息处理函数,这个函数名可以改,但一定要跟下文定义的函数名一样,不过,没必要改。 这个函数通过系统调用,但代码必需我们写。wndclass.cbCIsExtra = 0 ;wndclass.cbWndExtra = 0 ;/这两个字段用于在窗口

7、类别结构和Windows内部保存的窗口结构中预留一些额外空间设定为0,表示不使用它们。wndclass.hlnstance = hInstance ; /程序的执行实体句柄wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); 加载图标,当加载的图标是标准的图标时,LoadIcon的第一个参数必需指定为NULL。IDI为ID和I (ICON)的组合。 /IDI_APPLICTION为应用程序的图标。wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); 同上。IDC 中的 C 为 CURSOR /IDC_A

8、RROW表示当我们的鼠标移到这个应用程序上的时候为一个前头光标。wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);/取得绘制窗口背景的画刷对象(HBRUSH)为强制转换类型。这里指定为白色画刷,即这个程序得到的是 白色背景。wndclass.lpszMenuName = NULL ; 这个例子无菜单,所以菜单名为NULLwndclass.lpszClassName = “Lei”/这个类的类名。注意,这里的类名和下文的CreateWindow的第一个 参数必需相同。这里定义这个类名为Lei第二大块:注册窗口:RegisterC

9、lass (&wndclass);第三大块:建立窗口(哈,终于到了创建窗口的时刻) 先定义窗口句柄:HWND hwnd;然后调用创建窗口函数CreateWindow;即为:HWND hwnd;hwnd = CreateWindow (“Lei”,窗口类名,必需和上面的一致。TEXT ( The Hello Program), / 窗口的标题WS_OVERLAPPEDWINDOW, / 窗口 的样式,以 WS_开头的宏。/ #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED/WS_CAPTION/WS_SYSMENU/WS_THICKFRAME/WS_MINIM

10、IZEBOX/WS_THICKFRAME/WS_MINIMIZEBOX/WS_MAXIMIZEBOX)/可以看出这个窗口是一个既有标题(WS_CAPTION)又有系统菜(WS_SYSMENU ),也有最小化最大化按扭/(WS_MINIMIZEBOX | WS_MAXIMIZEBOX)CW_USEDEFAULT,/CW_USEDEFAULT,/初始化X的坐标位置CW_USEDEFAULT,初始化CW_USEDEFAULT,初始化Y的坐标位置CW_USEDEFAULT,初始化窗口的宽度CW_USEDEFAULT,初始化窗口的宽度CW_USEDEFAULT,初始化窗口的高度CW_USEDEFAULT

11、,初始化窗口的高度NULL,父窗口句柄,这里没有,所以设为NULLNULL,NULL,父窗口句柄,这里没有,所以设为NULLNULL,/窗口菜单句柄,没有,所以设为NULL注意:窗口菜单的系统菜单不同,系统菜单指一个应用程序的最左上角的那个图标所出现的菜单。hInstance,/hInstance,/程序的执行实体句柄NULL);/建立参数。指标设定为NULL,可用这个参数/NULL);的数据。至此,这个创建窗口的函数已写完。第四大块:显示及更新窗口原函数:ShowWindow(HWND hWnd,int iCmdShow);UpdateWindow(HWND hWnd)于是在这里我们可以写成

12、:ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);第五大块:消息循环:呼叫UpdateWindow之后,窗口就出现在视讯显示器上。程序现在必须准备读入使用者用键盘和鼠标输 入的数据oWindows为当前执行的每个Windows程序维护一个消息队列在发生输入事件之后,Windows 将事件转换为一个消息并将消息放入程序的消息队列中。程序通过执行一块称之为消息循环的程序代码从消息队列中取出消息:MSG msg;while(GetMessage (&m sg, NULL, 0, 0)TranslateMessage (&m sg);DispatchMessa

13、ge (&msg);消息循环以GetMessage呼叫开始,它从消息队列中取出一个消息:GetMessage(&msg,NULL,0,0)这一呼叫传给Windows 一个指标,指向名为msg的MSG结构。第二、第三和第四个参数设定为NULL 或者0,表示程序接收它自己建立的所有窗口的所有消息TranslateMessage (&msg); 将msg结构传给Windows,进行一些键盘转换DispatchMessage (&msg); 又将msg结构回传给Windowso然后,Windows将该消息发送给适当的窗 口消息处理程序,让它进行处理。这也就是说,Windows将呼叫窗口消息处理程序最后

14、,因为主函数是int型的,所以得要返回值return msg.wParam;至此,这个主函数就已经写完了。好了,现在写窗口消息处理函数了。窗口消息处理函数:原函数:LRESULT CALLBACK WndProc(WHND hwnd,UINT message, WPARAM wParam,LPARAM lParam)一般来说,Windows程序写作者使用switch和case结构来确定窗口消息处理程序接收的是什么消息,以 及如何适当地处理它。窗口消息处理程序在处理消息时,必须传回0。窗口消息处理程序不予处理的所有 消息应该被传给名为DefWindowProc的Windows函数。从DefWin

15、dowProc传回的值必须由窗口消息处 理程序传回。在这个程序中,我们只处理两个消息:WM_PAINT和WM_DESTROY (WM为Window Message的缩写)。 一. WM_PAINT 引用当窗口显示区域的一部分显示内容或者全部变为无效,以致于必须更新画面时,将由这个消息通 知程序。显示区域为什么会无效呢?在使用者改变HELLOWIN窗口的大小后,显示区域的显示内容重新变得无效当使用者将HELLOWIN最小化,然后再次将窗口恢复为以前的大小时,Windows将不会保存显示区域的 内容。在移动窗口以致其相互重迭时,Windows不保存一个窗口中被另一个窗口所遮盖的内容。在这一部分不再

16、 被遮盖之后,它就被标志为无效。对这个消息,我们来看一下这个例子case WM_PAINT:hdc = BeginPaint (hwnd, & ps);GetClientRect (hwnd, & rect);DrawText (hdc, TEXT (Hello, Windows 98!), -1, & rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint (hwnd, & ps);return 0 ;这个消息,几乎都是从 hdc = BeginPaint (hwnd, &ps),然后由 EndPaint (hwnd, &ps)结束。在h

17、dc = BeginPaint (hwnd, &ps)之后就是呼叫GetClientRect这个函数。第一个参数是窗口句柄,第二 个参数是一个指标,指向一个RECT型态的rectangle (矩形)结构。DrawText可以输出文字(正如其名字所表明的一样)。由于该函数要输出文字,第一个参数是从BeginPaint 传回的设备内容句柄,第二个参数是要输出的文字,第三个参数是-1,指示字符串是以字节0终结的。DrawText最后一个参数是一系列位旗标,旗标指示了文字必须显示在一行上,水平方向和垂直方向都位于 第四个参数指定的矩形中央。WM_DESTROY 消息WM_DESTROY消息是另一个重要

18、消息。这一个消息指示,Windows正在根据使用者的指示关闭窗口。 该消息是使用者单击Close按钮或者在程序的系统菜单上选择Close时发生的(在本章的后面,我们将详 细讨论WM_DESTROY消息是如何生效的)。HELLOWIN通过呼叫PostQuitMessage以标准方式响应WM_DESTROY消息:PostQuitMessage (0);该函数在程序的消息队列中插入一个WM_QUIT消息。好了,接下来,我们把这个程序的全部写下来。Copy to clipboardCODE:#include /这个程序所要包含的头文件LRESULT CALLBACK WndProc (HWND, UI

19、NT, WPARAM, LPARAM); 对消息处理函数的声明int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)主函数,程序的入口点HWNDhwnd ;MSGmsg ;WNDCLASS wndclass ;设计窗口类样式wndclass.style=CS_HREDRAW | CS_VREDRAW ; 样式为水平和垂直重画wndclass.stylewndclass .l pfnWndProc=WndProc ;wndclass .l pfnWndProc=W

20、ndProc ;指定消息处理函数wndclass.cbClsExtra/不使额外空间wndclass.cbWndExtrawndclass.cbClsExtra/不使额外空间wndclass.cbWndExtra不使额外空间wndclass.hInstance=hInstance wndclass.hInstance=hInstance ;/程序的执行实体句柄wndclass.hIcon=LoadIcon (NULL, IDI_APPLICATION);加载图标wndclass.hCursor=LoadCursor (NULL, IDC_ARROW);wndclass.hIcon=LoadIc

21、on (NULL, IDI_APPLICATION);加载图标wndclass.hCursor=LoadCursor (NULL, IDC_ARROW);加载光标wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH) ;/ 取得画刷对象wndclass.lpszMenuName = NULL ;无窗口菜单,注:不是无系统菜单wndclass .l pszClassName = wndclass .l pszClassName = Lei;窗口类类名,必需与下文一致注册窗口类RegisterClass (&wndclass);创建窗

22、口hwnd = CreateWindow (Lei,/ window class nameTEXT (The Hello Program), / window captionWS_OVERLAPPEDWINDOW, / window styleCW_USEDEFAULT,/ initial xpositionCW_USEDEFAULT,/ initial ypositionCW_USEDEFAULT,/ initial x sizeCW_USEDEFAULT,/initial y sizeNULL,/ parent window handleNULL,/ window menu handlehInstance,/ program instance handleNULL) ;/ creation parametersShowWindow (hwnd, iCmdShow) ;/ 显示窗口UpdateWindow (hwnd) ;/ 更新窗口消息循环while (GetMessage (&m sg, NULL, 0, 0) /从消息对列中取得一条消息TranslateMessage (&msg) ;/ 将 msg 结构传给 Windows,进行一些键盘转换DispatchMessage (&msg) ;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论