Windows应用程序:以windows作为平台运行的应用程序。
API函数
API函数:windows提供了大量可以在应用程序中调用的,用C语言编写的函数。
Windows API 函数的功能如下:
1.窗口管理函数:实现窗口的创建、移动和修改等功能。
2.图形设备函数:实现图形的绘制及操作功能,这类型函数的集合又叫做图形设备接口。
3.系统服务函数:实现与操作系统有关的一些功能。
窗口与句柄
在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的;要对某个窗口进行操作,就必须要得到这个窗口的句柄。
句柄:一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
消息及消息循环
Windows应用程序在程序启动并创建了程序窗口之后,随即就进入了一个循环等待状态,直到获取某个消息。系统为每个应用程序都建立了一个叫做消息队列的存储空间,在程序的运行过程中如果发生了一个事件,windows就会把这个事件所对应的消息送人消息队列等待使用。应用程序可以通过调用windows提供的API函数从消息队列中获取消息。一旦获取消息,就把这个消息发给系统,系统会根据消息中的hwnd找到应该接收消息的程序窗口,并根据窗口提供信息,以消息为参数来调用一个用户编写的叫做”窗口函数“的函数在窗口函数中对消息进行处理。处理完毕后,立即返回消息循环,等待获取下一个消息。
Windows程序设计是一种事件驱动模式的程序设计,主要是基于消息的。Windows应用程序必须接受了消息才会启动某种操作。当用户想要完成某种功能时,会调用操作系统的某种支持。然后操作系统将用户的需要包装成消息,并投递到消息队列当中,最后,应用程序从消息队列中取走消息,并进行响应。
Windows应用程序的基本结构
一个Windows程序一般由头文件、源文件。动态链接库、资源等几部分组成。
<span style="font-size:18px;">#include<Windows.h>//编写Windows程序必须要包含的头文件 LRESULT CALLBACK WndProc(HWND hwnd,//派送消息的窗口句柄 UINT message,//系统传递来的消息标示 WPARAM wParam,//消息的附加参数 LPARAM lParam)//消息的附加参数 { //根据相应的消息对应处理程序 switch (message) { case WM_LBUTTONDOWN://鼠标左键按下 { MessageBeep(0);//发出声音的API函数 } break; case WM_DESTROY: PostQuitMessage(0); //投放一个WM_QUIT消息到消息队列中函数参数将做为 //WM_QUIT的wParam一般用做WinMain函数的返回值, //GetMessage接到WM_QUIT消息时返回0消息循环结束程序退出。 break; default: return DefWindowProc(hwnd,message,wParam,lParam); //此函数调用默认窗口过程,对应用程序没有处理的消息进 //行默认处理。在编写窗口过程时一般放在default里 } } //主函数 int WINAPI WinMain(HINSTANCE hInstance,//当前应用程序实例的句柄 HINSTANCE PreInstance,//前一个应用程序实例的句柄, //在win32环境下,这个参数总是NULL LPSTR lpCmdLine,//指向本程序命令行的指针 int nCmdShow)//决定应用程序窗口显示方式的标志 { //创建一个完整的窗口需要以下四个步骤 HWND hwnd;//定义窗口句柄 MSG msg;//定义一个用来存储消息的变量 char lpszClassName[]="窗口"; WNDCLASS wc;//定义一个窗口类型变量 //设计一个窗口类 wc.style=0;//窗口样式 wc.lpfnWndProc=WndProc;//窗口函数,回调函数 //对消息进行处理,编写人员完成的部分 wc.cbClsExtra=0;//类附加内存,通常为设为0 wc.cbWndExtra=0;//窗口附加内存,通常为设为0 wc.hInstance=hInstance;//定义应用程序的实例句柄 wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的图标 wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口的光标 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景颜色 wc.lpszMenuName=NULL;//窗口菜单资源名 wc.lpszClassName=lpszClassName;//窗口类型名 //注册窗口类 RegisterClass(&wc); //创建窗口 hwnd=CreateWindow(lpszClassName,//窗口类型名 "Windows",//窗口实例的标题 WS_OVERLAPPEDWINDOW,//窗口风格 0,0,600,400,//(x,y,width,height)位置及大小 NULL,//父窗口的句柄 NULL,//主菜单的句柄 hInstance,//应用程序实例句柄 NULL);//一般设为NULL //显示及更新窗口 ShowWindow(hwnd,//窗口句柄 nCmdShow);//窗口的显示方式 UpdateWindow(hwnd);//UpdateWindow函数通过发送一个WM_PAINT //消息来刷新窗口。UpdateWindow将WM_PAINT消息直接发送给了窗口 //过程函数进行处理。此消息并没有放进消息队列。 //消息循环 //GetMessage()从消息队列获取消息 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);//把键盘消息转换为字符消息 DispatchMessage(&msg);//向系统派送消息 } return msg.wParam;//WinMain函数结束时,通过return返回一个值给系统。 //msg.wParam 来自一条表示退出的消息,返回这个值给系统,从而退出。 //类似于 return 0 ;只是这里这个值不一定也是0,具体取决于是什么消息。 }</span>
参考:http://blog.csdn.net/subleo/article/details/4440532
原文地址:http://blog.csdn.net/u010642004/article/details/44786095