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		//第二个消息的附加参数
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Puzzle harvester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值