Windows程序 内部运行原理 主讲人:孙鑫 tp://www.sunxin.org
Windows程序 内部运行原理 主讲人:孙鑫 http://www.sunxin.org
Windows应用程序,操作系统,计 算机硬件之间的相互关系 应用程序 消息队列 操作系统 输入输出设备 tp://www.sunxin.org
Windows应用程序,操作系统,计 算机硬件之间的相互关系 应用程序 操作系统 输入输出设备 ③ ④ ① ② 消息队列 http://www.sunxin.org
关于API 向下的箭头③表示应用程序可以通知操作系统执行某 个具体的动作,如操作系统能够控制声卡发出声音, 但它并不知道应该何时发出何种声音,需要应用程序 告诉操作系统该发出什么样的声音。这个关系好比有 个机器人能够完成行走的功能,但是,如果人们不告 诉它往哪个方向上走,机器人是不会主动行走的。这 里的机器人就是操作系统,人们就是应用程序。 tp://www.sunxin.org
关于API 向下的箭头③表示应用程序可以通知操作系统执行某 个具体的动作,如操作系统能够控制声卡发出声音, 但它并不知道应该何时发出何种声音,需要应用程序 告诉操作系统该发出什么样的声音。这个关系好比有 个机器人能够完成行走的功能,但是,如果人们不告 诉它往哪个方向上走,机器人是不会主动行走的。这 里的机器人就是操作系统,人们就是应用程序。 http://www.sunxin.org
关于API 那么,应用程序是如何通知操作系统执行某个功能的呢? 有过编程经验的读者都应该知道,在应用程序中要完成某 个功能,都是以函数调用的形式实现的,同样,应用程序 也是以函数调用的方式来通知操作系统执行相应的功能的。 操作系统所能够完成的每一个特殊功能通常都有一个函数 与其对应,也就是说,操作系统把它所能够完成的功能以 函数的形式提供给应用程序使用,应用程序对这些函数的 调用就叫做系统调用,这些函数的集合就是 Windows操作 系统提供给应用程序编程的接口( Application Programming Interface简称 WindOws api。如 Create Window就是一个API 函数,应用程序中调用这个函数,操作系统就会按照该函 数提供的参数信息产生一个相应的窗口。 tp://www.sunxin.org
关于API 那么,应用程序是如何通知操作系统执行某个功能的呢? 有过编程经验的读者都应该知道,在应用程序中要完成某 个功能,都是以函数调用的形式实现的,同样,应用程序 也是以函数调用的方式来通知操作系统执行相应的功能的。 操作系统所能够完成的每一个特殊功能通常都有一个函数 与其对应,也就是说,操作系统把它所能够完成的功能以 函数的形式提供给应用程序使用,应用程序对这些函数的 调用就叫做系统调用,这些函数的集合就是Windows操作 系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。如CreateWindow就是一个API 函数,应用程序中调用这个函数,操作系统就会按照该函 数提供的参数信息产生一个相应的窗口。 http://www.sunxin.org
关于消息及消息队列 向上的箭头④表示操作系统能够将输入设备的变化上传给应 用程序。如用户在某个程序活动时按了一下键盘,操作系统 马上能够感知到这一事件,并且能够知道用户按下的是哪一 个键,操作系统并不决定对这一事件如何作出反应,而是将 这一事件转交给应用程序,由应用程序决定如何对这一事件 作出反应。好比有个蚊子叮了我们一口,我们的神经末梢 (相当于操作系统)马上感知到这一事件,并传递给了我们 的大脑(相当于应用程序),我们的大脑最终决定如何对这 事件作岀反应,如将蚊子赶走,或是将蚊子拍死。对事件 作出反应的过程就是消息响应 tp://www.sunxin.org
关于消息及消息队列 向上的箭头④表示操作系统能够将输入设备的变化上传给应 用程序。如用户在某个程序活动时按了一下键盘,操作系统 马上能够感知到这一事件,并且能够知道用户按下的是哪一 个键,操作系统并不决定对这一事件如何作出反应,而是将 这一事件转交给应用程序,由应用程序决定如何对这一事件 作出反应。好比有个蚊子叮了我们一口,我们的神经末梢 (相当于操作系统)马上感知到这一事件,并传递给了我们 的大脑(相当于应用程序),我们的大脑最终决定如何对这 一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件 作出反应的过程就是消息响应。 http://www.sunxin.org
关于消息及消息队列 操作系统是怎样将感知到的事件传递给应用程序的呢? 这是通过消息机制 lesage)来实现的。操作系统将每 个事件都包装成一个称为消息的结构体MsG来传递给 应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG i HWND hwnd UINT message WPARAM WParam LPARAM IParam DWORD time. POINT pt 3 MSG tp://www.sunxin.org
关于消息及消息队列 操作系统是怎样将感知到的事件传递给应用程序的呢? 这是通过消息机制(Message)来实现的。操作系统将每 个事件都包装成一个称为消息的结构体MSG来传递给 应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; http://www.sunxin.org
关于句柄 ■句柄( HANDLE),资源的标识。 ■操作系统要管理和操作这些资源,都是通 过句柄来找到对应的资源。按资源的类型 又可将句柄细分成图标句柄( HICON), 光标句柄( HCURSOR),窗口句柄 (HWND),应用程序实例句柄 ( HINSTANCE)等等各种类型的句柄。操 作系统给每一个窗口指定的一个唯一的标 识号即窗口句柄。 tp://www.sunxin.org
关于句柄 ◼ 句柄(HANDLE),资源的标识。 ◼ 操作系统要管理和操作这些资源,都是通 过句柄来找到对应的资源。按资源的类型, 又可将句柄细分成图标句柄(HICON), 光标句柄(HCURSOR),窗口句柄 (HWND),应用程序实例句柄 (HINSTANCE)等等各种类型的句柄。操 作系统给每一个窗口指定的一个唯一的标 识号即窗口句柄。 http://www.sunxin.org
从变量的类型区分变量的用途 X,y, x=30; 7=30 //x和y既可以用来表示坐标点,也可以用来表示宽度和 高度,还可以用来表示身高和体重。 ypedef int WIDTH typedef int HEIGHT WIDTH X HEIGHT //好处:我们从变量的类型上就可以知道x和y是用来表 示宽度和高度 tp://www.sunxin.org
从变量的类型区分变量的用途 int x,y; x=30; y=30; //x和y既可以用来表示坐标点,也可以用来表示宽度和 高度,还可以用来表示身高和体重。 typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; //好处:我们从变量的类型上就可以知道x和y是用来表 示宽度和高度。 http://www.sunxin.org
Winmain函数 ■ Windows程序的入口函数 int WINAPI WinMain( HINSTANCE iNstance, / handle to current instance hINSTANCE bPreuInstance, // handle to previous instance PStR ApCmdline, //command line int ncmdsbom / show state tp://www.sunxin.org
WinMain函数 ◼ Windows程序的入口函数 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ); http://www.sunxin.org
窗口的创建 创建一个完整的窗口需要经过下面四个操 作步骤: 设计一个窗口类 注册窗口类 创建窗口; 显示及更新窗口。 tp://www.sunxin.org
窗口的创建 创建一个完整的窗口需要经过下面四个操 作步骤: ◼ 设计一个窗口类; ◼ 注册窗口类; ◼ 创建窗口; ◼ 显示及更新窗口。 http://www.sunxin.org