windows程序设计初步_第1页
windows程序设计初步_第2页
windows程序设计初步_第3页
windows程序设计初步_第4页
windows程序设计初步_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

12:50下午最简单的Windows程序

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){

MessageBox(NULL,TEXT("地信2008级!"),TEXT("HelloMsg"),0);return0;}1.正如在C程序中的进入点是函数main一样,Windows程序的进入点是WinMain2.Windows程序中的变量名经常使用“匈牙利命名法”的命名系统,该系统在变量名称前面增加了表示变量数据类型的短前缀.在这里仅需记住前缀i表示int,sz表示”以零结束的字符串”;PSTR作为指向字符串的指针12:50下午3.MessageBox函数用于显示短信息4.MessageBox第一个参数表示句柄,第二个参数是在消息框主体中显示的字符串,第三个参数是出现在消息框标题列上的字符串.MessageBox的第四个参数是系统中定义的一组以前缀MB_开始的常数的组合.可以为MB_OK,MB_OKCANCELMB_ABORTRETRYIGNOREMB_YESNOCANCEL12:50下午建立自己的窗口在Windows中,窗口一词有确切的含义.一个窗口就是屏幕上的一个矩形区域,它接收使用者的输入并以文字或图形的格式显示输出内容建立一个窗口,需要三个步骤注册窗口类,使用RegisterClass(&wc);创建窗口,使用CreateWindow显示窗口,使用ShowWindow(hwnd,nCmdShow); 和UpdateWindow(hwnd);

12:50下午窗口类typedefstruct_WNDCLASSA{

UINTstyle;//窗口样式,一般设为0WNDPROClpfnWndProc;//指向窗口函数的指针intcbClsExtra;intcbWndExtra;HINSTANCEhInstance;//定义应用程序实例HICONhIcon;//窗口的图标HCURSORhCursor;//窗口的光标HBRUSHhbrBackground;//窗口的背景颜色LPCSTRlpszMenuName;//窗口的菜单名LPCSTRlpszClassName;//窗口的类名}说明:1)一些新的数据类型,如UINT,其实就是typedef后,unsignedint的名称;2)句柄,在Windows中有很多象窗口,按钮,图标等,需要标识它们,为了区别于普通对象,使用”句柄”这各名称,例如HINSTANCE当前应用程序句柄,HWND窗口句柄等12:50下午如何注册窗口类

WNDCLASSwndclass;

wndclass.style=CS_HREDRAW|CS_VREDRAW;

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);

wndclass.lpszMenuName=NULL;

wndclass.lpszClassName=szAppName;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!"),szAppName,MB_ICONERROR);return0;}12:50下午创建窗口

hwnd=CreateWindow(szAppName,//窗口类别名,上一步结果

TEXT(“TheHelloProgram”),//窗口标题WS_OVERLAPPEDWINDOW,//窗口风格,可改

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,//窗口菜单句柄

hInstance,//程序实例句柄

NULL);

说明:CreateWindow传回被建立的窗口的句柄,该句柄存放在变量hwnd中,后者被定义为HWND类型,句柄12:50下午显示窗体在调用CreateWindow后,Windows内部已经建立了这个窗口.这就是说,Windows已经配置了一块内存,用来保存在CreateWindow调用中指定窗口的全部信息跟一些其它信息,而Windows稍后就是依据窗口句柄找到这些信息如果要显示窗体,还需要调用下面两个函数ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);ShowWindow的第一个参数是窗口句柄,第二个参数确定如何在屏幕上显示窗口,是一般大小、最小化还是最大化;例如可选SW_HIDE或SW_SHOWMAXIMIZED12:50下午消息循环窗口一旦创建并显示,应用程序的初始化工作即完成,随后便是程序的消息循环部分

while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}12:50下午补充知识:事件和消息Windows程序的特点是程序启动并建立窗体后,随即进入了一个等待状态,直到接收到某种刺激,比如键盘输入,鼠标单击之后,程序才会跳出等待对这个刺激进行处理,处理完毕后又进入等待;而这种刺激把它叫做事件Windows根据消息来处理各种事件,系统已经预先定义了很多消息,比如WM_LBUTTONDOWN为鼠标左键点击消息,WM_CLOSE关闭窗口产生的消息12:50下午补充知识:消息队列系统为程序建立了叫做消息队列的一个存储空间,程序运行过程发生一个事件,系统就把事件对应的消息放入消息队列中使用GetMessage函数取得消息队列中的消息,并利用这个函数的返回值组织一个循环来不断获取消息,一旦获取消息,就把这个消息送给系统,这个循环叫做消息循环

while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);//把键盘消息翻译成字符消息DispatchMessage(&msg);//将消息发送给Windows系统}然后,Windows将该消息发送给适当的窗口消息处理程序,让它进行处理。12:50下午第二步消息处理的函数窗口建立好以后,需要有一个地方来处理消息.在Windows系统中,处理消息的地方叫做消息处理的函数,在本例中是WndProc()函数LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)消息处理函数WndProc()是完成任务的核心,也是需要程序员编写大量代码的地方之前在定义窗口类的时候,必须把这个窗口函数的名称WndProc()赋给WNDCLASS结构的lpfnWndProc成员,指明这个窗口如果要响应消息,就到窗口函数WndProc()中去处理12:50下午本例中的三个消息LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){ switch(message){ caseWM_CREATE: PlaySound(); return0;caseWM_PAINT:

caseWM_DESTROY:

}returnDefWindowProc(hwnd,message,wParam,lParam);}12:50下午WM_CREATE消息

WinMain中调用CreateWindow函数时,WndProc接收这个消息在接收到WM_CREATE消息后,HELLOWIN在对这个消息的处理中播放一个名为HELLOWIN.WAV的声音文件.它通过调用PlaySound函数来完成如果我们把WM_CREATE消息改为WM_LBUTTONDOWN消息,那么程序会发生什么变化呢12:50下午WM_PAINT消息当窗口显示区域的一部分显示内容或者全部变为”无效”,以致于必须”更新画面”时,将由这个消息通知程序显示区域的显示内容怎么会变得无效呢?在最初建立窗口的时候,整个显示区域都是无效的,因为程序还没有在窗口上画什么东西.第一条WM_PAINT消息(通常发生在WinMain中调用UpdateWindow时)指示窗口消息处理程序在显示区域上画一些东西在使用者改变HELLOWIN窗口的大小后,显示区域的显示内容重新变得无效.然后,窗口消息处理函数WndProc又将收到一条WM_PAINT消息在移动窗口以致其相互重迭时,Windows不保存一个窗口中被另一个窗口所遮盖的内容(因为图形数据很大);在这一部分不再被遮盖之后,它就被标志为无效.窗口消息处理程序接收到一条WM_PAINT消息,以重新绘制窗口的内容12:50下午caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);

GetClientRect(hwnd,&rect);//获得窗口区域

DrawText(hdc,TEXT("Hello,Window

温馨提示

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

评论

0/150

提交评论