概述
文章目录
- 一、API与SDK
- 二、窗口与句柄
- 1. 窗口
- 2. 句柄
- 三、消息与消息队列
- 1. 消息
- 2. 消息队列
- 3. 进队消息和不进队消息
- 四、WinMain函数
- 1. WinMain的定义
- 2. 窗口的创建
- 2.1 设计一个窗口类
- 2.2 注册窗口类
- 2.3 创建窗口
- 2.4 显示及更新窗口
一、API与SDK
API:Windows操作系统提供了各种各样的函数,这些函数是Windows操作系统提供给应用程序编程的接口,简称API函数。
SDK:是实际开发中所需要的资源的一个集合。
二、窗口与句柄
1. 窗口
一个Windows应用程序至少要有一个窗口、称为主窗口。窗口是屏幕上一块矩形的区域,是Windows应用程序与用户进行交互的接口。利用窗口,可以接收用户的输入,以及显示输出。
一个应用程序窗口通常都包含标题栏、菜单栏、系统菜单、最小化框、最大化框、可调边框或者滚动条。
窗口包括客户区与非客户区。
????客户区:应用程序统常在客户区中显示文字或者绘制图像。
????非客户区:标题栏、菜单栏、系统菜单、最小化框和最大化框、可调边框统称为窗口的非客户区,由Windows系统来管理。
窗口可以有一个父窗口,有父窗口的窗口称为子窗口。
窗口包括:对话框、消息框等。
2. 句柄
在Windows应用程序中,窗口通过句柄来标识的。对某个窗口进行操作,首先要得到这个窗口的句柄。
????句柄:在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。
三、消息与消息队列
1. 消息
在Windows中,消息是由MSG结构体来表示的。MSG结构体定义如下:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG;
????hwnd:表示消息所属的窗口。
????message:指定消息的标识符。
????wParam与lParam:指定消息的附加信息。
????time:消息投递到消息队列中的时间
????pt:鼠标的当前位置。
2. 消息队列
每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。
Windows将产生的消息依次放入消息队列中,而应用程序则通过一个消息循环不断的从消息队列中取出消息,并进行响应。
3. 进队消息和不进队消息
进队消息:将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。
不进队消息:在系统调用窗口的过程时直接发送给窗口。
四、WinMain函数
WinMain函数是应用程序的基础。当操作系统启动一个程序时,它调用的就是该程序的WinMain函数。
WinMain函数是Windows程序的入口函数,与DOS程序的入口函输main的作用相同,当WinMain函数结束或返回时,Windows应用程序结束。
1. WinMain的定义
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
????hInstance:表示该程序当前运行的实例的句柄,这是一个数值。唯一标识运行中的实例。
????hPrevInstance:当前实例的前一个实例的句柄。
????lpCmdLine:一个以空终止的字符串,指定传递给应用程序的命令行参数。
????nCmdShow:指定程序的窗口应该如何显示。参数值由调用者决定。
2. 窗口的创建
创建一个完整的窗口需要的操作步骤:
①设计一个窗口类
②注册窗口类
③创建窗口
④显示及更新窗口
2.1 设计一个窗口类
窗口特征由WNDCLASS结构体定义。
WNDCLASS结构体的定义如下:
typedef struct _WNDCLASS{
UINT stype;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS;
???? 第一个成员变量style指定这一类型窗口的样式,常用的样式如下:
⒈CS_HERDRAW
窗口水平方向上的宽度发生变化时,将重新绘制整个窗口。当窗口重绘时,窗口的文字和图形将会被擦除。若没有指定这一个样式,水平方向调整窗口宽度时,将不会重绘窗口。
⒉CS_VERDRAW
当窗口垂直方向上的高度发生变化时,将重新绘制整个窗口。
⒊CS_NOCLOSE
禁用系统菜单的Close命令,将导致窗口没有关闭按钮。
⒋CS_DBLCLKS
当用户在窗口中双击鼠标时,向窗口过程发送鼠标双击消息。
???? 第二个成员变量lpfnWndProc是一个函数指针,指向窗口过程函数。窗口过程函数是一个回调函数。回调函数的实现机制是:
1 定义一个回调函数
2 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者。
3 特定的事件或者条件发送的时候,调用者使用函数指针调用回调函数对事件进行处理。
2.2 注册窗口类
设计完窗口类(WNDCLASS)后,需要调用RegisterClass函数对其进行注册,注册成功后,才可以创建该类型的窗口。注册函数的原型声明为:
ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
lpWndClass:窗口类对象的指针。
2.3 创建窗口
创建窗口的原型声明为:
HWND CreateWindow(
LPCTSTR lpClassName;
LPCTSTR lpWindowName;
DWORD dwStyle;
int x;
int y;
int nWidth;
int nHeight;
HWND hWndParaent,
HMENU hMenu,
HANDLE hInstance,
LPVOID lpParam
);
2.4 显示及更新窗口
1)显示窗口
BOOL ShowWindow(
HWND hWnd,
int nCmdShow
);
nCmdShow指定窗口显示的状态,常用以下几种:
⭕SW_HIDE:隐藏窗口并激活其他窗口。
⭕SW_SHOW:在原位置以原来的尺寸激活显示窗口。
⭕SW_SHOWMAXIMIZED:激活窗口并将其最大化显示。
⭕SW_SHOWNORMAL:激活并显示。
2)更新窗口
BOOL UpdateWindow(HWND hWnd);
最后
以上就是搞怪夏天为你收集整理的基础语法篇_1——Windows程序内部运行机制的全部内容,希望文章能够帮你解决基础语法篇_1——Windows程序内部运行机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复