《windows环境下32位汇编语言程序设计》FirstWindow 中的hwnd 和hWinMain的疑问

时间:2021-12-17 04:51:07
罗云彬的那本书第四章的FirstWindow程序的窗口过程函数里有几句不太明白

.if eax == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax

invoke GetClientRect,hWnd,addr @stRect
                          ;省略部分代码                        
                        invoke EndPaint,hWnd,addr @stPs
以上给BeginPaint,GetClientRect,EndPaint传递的窗口句柄都是hWnd,但到了下面要销毁窗口时的这句
.elseif eax == WM_CLOSE
invoke DestroyWindow,hWinMain
怎么给DestroyWindow传的句柄变为hWinMain了?

(hWinMain是用CreateWindowEx新建窗口的句柄)

望大虾们给予指点

6 个解决方案

#1


呵呵,其实CreateWindowEx返回的hWinMain和hwnd是一样的。。。

#2


关于这个我大概是这么理解的
因为窗口的大部分行为是类似的,所以,窗口过程是一个通用的代码
所以里面的参数是hWnd,假如有多个窗口共享一个窗口过程的话,
传给窗口过程哪个窗口的句柄,就对该窗口进行处理

但是一般处理WM_CLOSE消息时,表示程序已经要退出了,所以针对的是主窗口
因此在DestroyWindow里指定主窗口的句柄是hWndMain,尽管在这里hWndMain和hWnd
的值是一样的

我也刚学这里  说不太清楚   
感觉从多窗口应用程序的角度考虑,会好一些

还有一个例子不知道你注意了没有,有个在WM_CREATE消息里建立子窗口的例子
用系统已经定义好的button类,CreateWindowEx的父窗口句柄参数指定的是hWnd,
而不是hWndMain,因为在WM_CREATE消息发送时,父窗口还没建立起来,所以这时候hWndMain
是没有值的

#3


蛮有道理.

#4


支持

UP

#5


Geomatic说的有道理。谢谢大家了。

#6


我也是不太明白,似乎没有必要用hwinmain。另外,窗口过程的postquitmessage如何知道把wm_quit传给那个线程?

#1


呵呵,其实CreateWindowEx返回的hWinMain和hwnd是一样的。。。

#2


关于这个我大概是这么理解的
因为窗口的大部分行为是类似的,所以,窗口过程是一个通用的代码
所以里面的参数是hWnd,假如有多个窗口共享一个窗口过程的话,
传给窗口过程哪个窗口的句柄,就对该窗口进行处理

但是一般处理WM_CLOSE消息时,表示程序已经要退出了,所以针对的是主窗口
因此在DestroyWindow里指定主窗口的句柄是hWndMain,尽管在这里hWndMain和hWnd
的值是一样的

我也刚学这里  说不太清楚   
感觉从多窗口应用程序的角度考虑,会好一些

还有一个例子不知道你注意了没有,有个在WM_CREATE消息里建立子窗口的例子
用系统已经定义好的button类,CreateWindowEx的父窗口句柄参数指定的是hWnd,
而不是hWndMain,因为在WM_CREATE消息发送时,父窗口还没建立起来,所以这时候hWndMain
是没有值的

#3


蛮有道理.

#4


支持

UP

#5


Geomatic说的有道理。谢谢大家了。

#6


我也是不太明白,似乎没有必要用hwinmain。另外,窗口过程的postquitmessage如何知道把wm_quit传给那个线程?