win32汇编 第一个窗口程序(二)
上一篇,我们已经知道了,一个窗口程序是以事件作为驱动的,其中事件是由消息循环进行处理,首先用GetMessage得到信息,然后TranslateMessage来对信息进行预处理,最后用DispatchMessage调用窗口对应的窗口过程。
补充:应用程序之间也可以进行通信,PostMessage是把消息放到程序的消息队列,用SendMessage是把消息放到应用程序的窗口过程函数里面。
这一篇,我们来学习一下如何去创建一个窗口,从代码上,我们可以看到,程序从start:开始,然后调用了_WinMain函数。
这就是相当于入口函数。
然后我们做了三大步:
- 注册窗口类
- 建立和显示窗口
- 消息循环(已经分析)
现在我们就从注册窗口类去进行学习。
_WinMain proc
LOCAL @stWndClass:WNDCLASSEX
LOCAL @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
;注册窗口类
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW+1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
首先了解一下什么是句柄, 简单的说句柄就是一个用来识别的编号,他对应用程序不会造成任何影响。Windows利用这个编号来识别各种资源。就类似取快递,说尾号123,快递员就能拿到对应的快递。
然后再了解一下什么是模块,模块就是运行中的EXE或者DLL文件,句柄就用来区分这些模块。
invoke GetModuleHandle,NULL
mov hInstance,eax
这里调用GetModuleHandle就是得到本模块的句柄,NULL的意思就是指本模块句柄
然后返回值返回到变量hInstance,这里为什么要这样做,GetModuleHandle还可以怎样用,个人感觉一开始不用深究,先了解大概的情况,后面再去深入了解,现在我们知道我们已经得到了本程序的句柄。
现在我们正式开始注册窗口类:
首先用local来定义一个类对象:
LOCAL @stWndClass:WNDCLASSEX
........
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
然后把对象内存空间全部清零。
有点累了,休息一下
本文地址:https://blog.csdn.net/qq_29263207/article/details/85834718
上一篇: 初窥响应式布局
推荐阅读
-
我的第一个 Windows 窗口程序(1)
-
我的第一个上线小程序,案例实战篇二——LayaAir游戏开始界面开发
-
C++ 实验二 NO.1_(3) 1:熟悉DEV环境,练习自己的第一个程序使用DEV集成环境来编辑,运行简单的数据输入和运算实验。(3)编写一个程序,要求:提示输入3个数;显示这3个数,求他们的平均值
-
vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
-
我的第一个上线小程序,三篇其二
-
Win32 程序在启动时如何激活前一个启动程序的窗口
-
win32汇编 第一个窗口程序(二)
-
Netty4详解二:开发第一个Netty应用程序
-
win32下开发hadoop应用程序(二)
-
win32下开发hadoop应用程序(二)