Windows 程序内部运行机制
窗口与句柄(HANDLE)
- 在Windows 应用程序中窗口时通过窗口句柄(HWND)来标识的,对某个窗口进行操作.首先要得到这个窗口的句柄.
- 句柄(HANDLE)是WINDOWS程序中重要的概念,在Windows程序中,有各种各样的资源(窗口,图标,光标),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。例如图标句柄(HICON),光标句柄(HCURSOR),画刷句柄(HBRUSH).
消息与消息队列
- Windows程序设计是一种事件驱动方式的程序设计模式,主要是基于消息的。
- 在主窗口中,产生一个事件(例如按下鼠标),系统会产生WM_LBUTTONDOWN消息,并投递到应用程序的消息队列中,然后应用程序从消息队列中取出消息并进行响应(进行处理, 即调用窗口处理函数)。
- 消息是有MSG结构体来表示的.(参考MSDN)
typedef struct tagMSG{
HWND hwnd; //表示消息所处(关联)的窗口.
UINT message; //消息的标识符,例如宏 WM_KEYDOWN , WM_CHAR 等.
WPARAPM wParam, //消息的第一个附件信息
LPARAM lParam, //消息的第二个附加信息
DWORD time; //消息投递到消息队列的时间
POINT pt; //鼠标当前位置
}MSG
- Windows 消息处理的机制为:
1)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。
2)应用程序在消息循环中调用GetMessage函数从消息队列中取出消息,并进行预处理。
如放弃响应,或者调用TranslateMessage产生新的消息。
3)应用程序调用DispatchMessage,将消息回传给操作系统。消息使用MSG结构体表示的。
4)系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。
Win32程序的实现步骤.
1. 定义WinMain函数. WinMain函数是windows程序的入口函数.
2. 创建一个窗口。
1).设计一个窗口类.
- WNDCLASS
2).注册窗口类.
- ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
3).创建窗口.
- CreateWindow(..)
4).显示和更新窗口.
- 显示:
BOOL ShowWindow(
HWND hWnd, // handle to window
int nCmdShow // show state
);
- 更新:
BOOL UpdateWindow(
HWND hWnd // handle to window
);
3. 进行消息循环。
- 不断的从消息队列中取出消息,并进行响应
BOOL GetMessage(
LPMSG lpMsg // address of structure with message
HWND hWnd, // handle of window 接受属于哪个窗口的消息,通常设置为NULL,用于接受所有窗口消息。
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax // last message wMsgFilterMin,wMsgFilterMax 都设为0,接受所有消息。
};
GetMessage 对于WM_QUIT消息,返回值为零,对于其他消息,返回值非零。出现错误时,返回值为-1.
- 通常消息循环代码为:
MSG msg;
while(GetMessage(&msg,NULL,0,0){
TranslateMessage(&msg); //将虚拟键消息转化为字符消息。
DispatchMessage(&msg); //分配一个消息到窗口过程,由窗口过程函数对消息进行处理.(响应)
}
4. 编写窗口处理函数
- 窗口函数的声明如下:
LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
);
- 显然,系统是通过窗口过程函数的地址(指针)来调用窗口过程函数。
分享到:
相关推荐
Windows程序内部运行机制详细说明Windows窗口编程过程窗口的产生,以及各种句柄与窗口的对应关系
Windows程序内部运行机制,Windows程序内部运行机制,Windows程序内部运行机制
讲解windows API,窗口类消息循环等
要想熟练掌握 Windows 应用程序的开发,首先需要理解Windows 平台下程序运行的 内部机制。市面上很多介绍Visual C++开发的书籍...部运行机制,为读者扫清VC++学习路途中的第一个障碍,为进一步学习MFC 程序打下基 础。
本文以孙鑫老师VC++教程中的程序为基础,详细讲解了Windows程序内部运行机制,相信可以帮助大家更好的理解Windows程序运行原理及相应的VC++程序设计。具体内容如下: 创建一个Win32应用程序步骤: 1、编写WinMain...
要想熟练掌握 Windows 应用程序的开发,首先需要理解Windows 平台下程序运行的 内部机制。市面上很多介绍Visual C++开发的书籍...部运行机制,为读者扫清VC++学习路途中的第一个障碍,为进一步学习MFC 程序打下基 础。
从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。本书不同于一般的讲述VC++使用...
从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。本书不同于一般的讲述VC++使用...
本书从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 本书内容丰富、实用性强...
、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 本书内容丰富、实用性强,许多代码可以直接应用到工程...
本书从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 本书内容丰富、实用性...
本书从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 本书内容丰富、实用性...
《VC++深入详解》从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 《VC++...
《VC++深入详解》从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 《VC++...
Windows内部运行原理,了解Windows内部运行机制,明确应用程序及操作系统之间的关系
从Windows程序内部运行机制讲起,由浅入深详细讲解VC++的方方面面。
Windows程序内部运行机制 1.1 API与SDK 1.2 窗口与句柄 1.3 消息与消息队列
vc++深入详解代码,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架
从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单