180103 逆向-SDK基础知识

1625-5 王子昂 总结《2018年1月3日》 【连续第460天总结】
A. SDK基础知识
B.

窗口结构体

创建窗口之前要初始化窗口结构体

WNDCLASS wndclass;

最关键的参数是窗口类型名spszClassName
操作系统通过窗口的类名来区分不同的窗口

创建之前进行注册

RegisterClass(&wndclass);

然后就可以用CreateWindow()创建并用ShowWindow()显示窗口了

消息循环

while(GetMessage(&msg, NULL, 0, 0))
{
    TranslagetMessage(&msg);
    DispatchMessage(&msg);
}

GetMessage的第二个参数为窗口句柄,因此每个GetMessage构成的消息循环都只针对一个窗口
换言之,一个应用程序如果拥有多个窗口,那么就会有多个消息循环
另外,如果多个窗口不属于同一注册类型的窗口,即窗口类名不同,那么该应用程序就会有多个窗口过程函数
GetMessage分为三种情况:
1. 取到WM_QUIT时,返回值为0,则退出消息循环
2. 如果消息队列中没有消息,则该线程将挂起,等待消息
3. 如果接到消息,将调用TranslateMessage来转换消息

Translate将两个或以上的虚拟键值转换为更确定的字符消息,即将WM_KEYDOWN、WM_KEYUP转换为WM_CHAR消息。例如在菜单项上左键按下和左键弹起两个消息会被转换为菜单消息WM_COMMAND

DispatchMessage会将消息分派给操作系统。操作系统来调用窗口过程函数进行处理消息。

窗口过程函数

窗口过程函数WndProc通过结构体来注册
wndclass.lpfnWndProc = WndProc;
在窗口过程函数中通过switch…case…结构来处理消息

原型为LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
第一个参数为句柄,第二个为消息值,第三、四个参数则是消息附加信息
值得一提的消息有以下3个
1. WM_CREATE
窗口创建成功,还没有显示之前就会响应WM_CREATE消息
2. WM_PAINT
窗口重绘消息。当窗口大小、位置、显示内容等发生改变时,会向窗口的消息队列中投递一个WM_PAINT消息,要求窗口重绘
3. WM_DESTROY
在关闭窗口时调用DestroyWindows函数后,会向窗口的消息队列投递一个WM_DESTROY消息。在响应该消息时调用PostQuitMessage函数,向消息队列中投递一个WM_QUIT消息来终止消息循环

C. 明日计划
看书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值