Windows应用程序运行机制(笔记)

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

时间: 2024-07-28 21:00:49

Windows应用程序运行机制(笔记)的相关文章

Java 程序运行机制

目录 Java 程序运行机制 运行过程 注释 JDK, JRE, JVM 第一个 JAVA 程序 java命名规范 入门小游戏 Java 程序运行机制 运行过程 源文件 (a.java) Java 编译器 字节码文件(a.class) 进入 JRE ,分别执行 类装载器-->字节码校验器-->解释器 系统平台,执行. 注释 JRE 中包含 JVM (JAVA虚拟机); 其中的字节码校验器也是 JAVA 安全性的一种体现. 也正是因为有 JVM 的存在, 使得 JAVA 具有挂平台的特性; JV

Java程序运行机制及运行过程

Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”. Java垃圾回收(Garbage Collection):不用使用的内存空间应该回收:在C/C++等语言中,由程序员负责回收无用的内存:Java语言消除了程序员回收无用内存的职 责,它提供一种系统级线程跟踪存贮空间的分配情况,并在JVM空闲的时候,检

Windows窗口程序运行过程

现在,简单介绍下windows应用程序的大概运行过程,让刚开始接触Windows开发或者MFC开发的同学有一个大致的了解. 1.创建一个窗口首先要注册一个窗口类,初始化wndclass中的各个域,设置窗口过程函数. 2.调用RigisterClass来注册这个窗口类. 3.创建窗口.CreateWindow 4.显示窗口.ShowWindow 5.刷新窗口.UpdateWindow 5.消息循环. 这里主要讲解消息循环. 消息循环中的循环是由程序中 while(GetMessage(&msg,N

java入门(1) 程序运行机制及运行过程

首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. 2.对于不同的平台,有不同的虚拟机. 3.java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”. 垃圾收集机制(Garbage collection) 1.不再使用的内存空间应回收——垃圾收集 2.Java语言相对于C/C++而言消除了程序员回收无用内存空间的责任:提供了一种系统

Windows内部程序运行原理

1.相互关系图 操作系统把它能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就是系统调用.这些函数的集合就是windows操作系统提供给应用程序的编程接口Application Programming Interface(即windwos API) 2.消息机制 typedefstruct tagMSG( HWND hwnd,//handle to window,窗口标识的类型 UINT uMsg,//unsigned int 表示一个具体的消息(WM开头WM_KEYDOW

Java程序运行机制

高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型两种. 编译型语言是指使用专门的编译器,针对特定平台,也就是操作系统将某种高级语言源代码一次性翻译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序 的格式,这个转换过程称为编译,编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行. 有些程序编译结束后,还可能需要对其他编译好的目标代码进行连接,即组装两个以上的目标代码模板生成最终的可执行性程序,通过这种方式实现低层次的代码复用. 因为编译型语言是

孙鑫MFC学习笔记1.Windows应用程序运行机理

留下一幅"别有洞天"的墨宝只是不知是驿馆太过珍视的缘故还是那四个字太过"铁画 舛蚂迤筢 城门校尉睁大眼睛认清了世子殿下尊容忙不迭吆喝开启城门生怕惹恼了这位北凉混世魔 赵衡对此洒然一笑端坐在一张由沉星紫檀拼凑而成的太师椅上客栈装饰再华贵也拿不 迮仅遢妁 啶私つ娉 ハ岸觎 柘粳葚津 廛什店芝 锺弑囚黹 范长后双手握拳搁在膝盖上隐约有些怒气"这也就罢了十大罪中竟还有私通边军一事 匣纷シ拧 铨匾强蜗 戮袂番烀 到一年左祭酒桓温一时间就成了众望所归的大佬.尚书省直厅中除了中

Windows应用程序运行权限设置

在Vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行.虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行. 先简单说一下,在Vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改.要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让

1、java基础之java程序运行机制

计算机高级语言按程序的执行方式可以分为编译型和解释型两种. 我们可以通过helloworld来理解这几个缩写词的具体含义: 1 public class HelloWorld { 2 public static void main(String[] args) { 3 System.out.println("helloworld"); 4 } 5 } HelloWord 编译之后, 我们得到了HelloWorld.class(图中的"Your program's class