我是靠谱客的博主 搞怪夏天,最近开发中收集的这篇文章主要介绍基础语法篇_1——Windows程序内部运行机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 一、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程序内部运行机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部