当前位置: 移动技术网 > 科技>操作系统>windows > win32汇编 第一个窗口程序(二)

win32汇编 第一个窗口程序(二)

2019年01月05日  | 移动技术网科技  | 我要评论
上一篇,我们已经知道了,一个窗口程序是以事件作为驱动的,其中事件是由消息循环进行处理,首先用GetMessage得到信息,然后TranslateMessage来对信息进行预处理,最后用DispatchMessage调用窗口对应的窗口过程。补充:应用程序之间也可以进行通信,PostMessage是把消息放到程序的消息队列,用SendMessage是把消息放到应用程序的窗口过程函数里面。这...

上一篇,我们已经知道了,一个窗口程序是以事件作为驱动的,其中事件是由消息循环进行处理,首先用GetMessage得到信息,然后TranslateMessage来对信息进行预处理,最后用DispatchMessage调用窗口对应的窗口过程。

 补充:应用程序之间也可以进行通信,PostMessage是把消息放到程序的消息队列,用SendMessage是把消息放到应用程序的窗口过程函数里面。


 这一篇,我们来学习一下如何去创建一个窗口,从代码上,我们可以看到,程序从start:开始,然后调用了_WinMain函数。

   这就是相当于入口函数。

   然后我们做了三大步:

  1.   注册窗口类
  2.   建立和显示窗口
  3.   消息循环(已经分析)

现在我们就从注册窗口类去进行学习。

_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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网