Windows核心机制(1)

Windows核心机制(1),第1张

Windows核心机制(1)

MSG

typedef struct tagMSG{
	HWND hwnd;	//句柄:资源的标识
	UINT message;
	WPARAM wParam;
	LPARAM lParam; 
	DWORD time;	//消息被传递出去的时间
	POINT pt;		//当消息被投递的时候,光标在屏幕上的一个位置
}MSG, *PMSG;

int WINAPI WinMain(
	HINSTANCE hInstance,	//当前应用程序的实例句柄
	HINSTANCE hPrevInstance,	//上一个应用程序的实例句柄
	LPSTR IpCmdLine,		//命令行(LP开头就是指针类型,STR表示字符串)
	int nCmdShow		//显示的状态
);

窗口的创建步骤:

	(1)设计一个窗口类
	(2)注册窗口类
	(3)创建窗口
	(4)显示及更新窗口

(1)设计一个窗口

typedef _struct _WNDCLASS{
	UINT style;		//类的类型
	WNDPROC lpfnWndProc;	//回调函数
	int cbClsExtra;		//类的额外的数据
	int cbWndExtra;		//窗口额外的数据
	HINSTANCE hInstance;	//当前应用程序的实例号
	HICON hIcon;		//图标的句柄
	HCURSH hCursor;		//光标的句柄
	HBRUSH hbrBackground;	//画刷的句柄(背景)
	LPCTSTR lpszMenuName;	//(LP长指针,C是常量,所以就是一个常量字符串)菜单名字
	LPCTSTR lpszClassName;	//类的名字
}WNDCLASS, *PWNDCLASS;

回调函数:
原理:当应用程序收到给某一窗口的消息时,就应该调用某一函数来处理这条消息。
这一调用过程不用应用程序自己来实施,而由 *** 作系统来完成,但是,回调函数本身的代码必须
由应用程序自己完成。对于一条消息, *** 作系统到底调用应用程序中的那个函数(回调函数)来
处理呢? *** 作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。
每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过ipfnWndProc成员指定的。

(2)注册窗口类

ATOM RegisterClass(
	ConST WNDCLASS *lpWndClass	//窗口类的结构体的指针
);

(3)创建窗口
步骤:定义句柄(HWND):用来保存创建窗口的标识

HWND CreadteWindow(
	LPCTSTR lpClassName,	//注册的类名
	LPCTSTR lpWindowName,	//窗口的名字(标题栏上面的名字)
	DWORD dwStyle,		//窗口的类型
	int x,			//窗口的水平坐标(左上角)
	int y,			//窗口的垂直坐标(左上角)
	int nWidth,		//窗口的宽度
	int nHeight,		//窗口的高度
	HWND hWndParent,	//窗口的句柄(父窗口)
	HMENU hMenu,		//菜单的句柄
	HINSTANCE hInstance,	//当前应用程序的实例号
	LPVOID lpParam
);

(4)显示及更新窗口
显示:

BOOL ShowWindow(
	HWND hWnd,	//显示窗口的句柄
	int nCmdShow	//显示的状态
);

更新:

UpdateWindow(hwnd);

(5)消息循环
1.获取消息:

BOOL GetMessage(
	LPMSG lpMsg,		//消息结构体的指针
	HWND hwnd,		//获得哪一个窗口(句柄)的消息,(设置为NULL:获取属于调用线程的任何消息)
	UINT wMsgFilterMin,	//消息的最小值
	UINT wMsgFilterMax	//消息的最大值
);

取出消息:返回true
当收到WM_QUIT消息的时候返回false

2.翻译消息:

TranslateMessage(
	LPMSG lpMsg,		//消息结构体的指针
);

作用:将取到的消息进行转换

DispatchMessage(
	LPMSG lpMsg,		//消息结构体的指针
);

作用:将收到的消息传到窗口的回调函数

回调函数(过程函数):

LRESULT CALLBACK WindowProc(
	HWND hwnd,		//窗口的句柄
	UINT uMsg,		//消息标识
	WPARAM wParam,		//第一个消息的附加参数
	LPARAM lParam		//第二个消息的附加参数
);

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存