隨鈊乄鎍慾 发表于 2014-3-29 16:22:14

Win32汇编中这两个关闭有啥区别?

在小甲鱼WIN32汇编视频第三十二讲中的 "FirstWindow.asm"有如下两个关闭窗口的地方都有什么区别如下:
第一处:
; 消息循环
;********************************************************************
                .while      TRUE
                        invoke      GetMessage,addr @stMsg,NULL,0,0
                        .break      .if eax      == 0 //这是第一处可以关闭窗口之处.
                        invoke      TranslateMessage,addr @stMsg
                        invoke      DispatchMessage,addr @stMsg
                .endw
                ret


第二处(在窗口过程当中):
; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\
                                WS_CHILD or WS_VISIBLE,\
                                10,10,88,22,\
                                hWnd,1,hInstance,NULL
;********************************************************************
                .elseif        eax ==        WM_CLOSE//这里是第二次关闭窗口请问有什么区别
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL

青玄 发表于 2014-3-29 16:22:15

隨鈊乄鎍慾 发表于 2014-3-30 13:30 static/image/common/back.gif
恩,再次感谢你的回答。哪什么情况才能触发WM_QUIT这个消息呢?

恩!我测试了一下,如果把 .break .if eax == 0去掉的话,虽然窗口关闭了,可是在系统进程中还是可以看到这个程序的,如果加上的话,就看不到了,所以,由此,可以判断出它是在执行了WM_CLOSE这个消息以后才触发了这个消息的。

青玄 发表于 2014-3-29 21:32:04

其实第一个关闭时跳出消息循环的循环队列,否则的话程序就一直循环在哪儿了,第二个关闭是有循环队列接受消息当接受到WM_CLOSE这个消息的时候,它就会调用DestroyWindow与PostQuitMessage去毁掉窗口

隨鈊乄鎍慾 发表于 2014-3-30 07:40:47

青玄 发表于 2014-3-29 21:32 static/image/common/back.gif
其实第一个关闭时跳出消息循环的循环队列,否则的话程序就一直循环在哪儿了,第二个关闭是有循环队列接受消 ...

哪么第一个关闭反应到实际操作当中可以看着是我们用鼠标点了一下右上角的关闭按钮。哪第二个关闭是由什么实际动作产生的消息呢?谢谢解答!

青玄 发表于 2014-3-30 10:40:01

嗯...,你说的用鼠标点了一下右上角的关闭按钮那是消息队列接收到了WM_CLOSE消息的时候,它关闭的是这个程序的窗口,而你说的 .break .if eax == 0那个的话,是系统接受到了WM_QUIT这个消息它的返回值是0,也就是eax == 0的时候,他关闭的是这个程序的整个进程,如果没有这个.break .if eax == 0的话,那么虽然你按了关闭按钮,但程序的进程还没有被关闭,所以,只有退出消息循环程序的进程才可以退出!

隨鈊乄鎍慾 发表于 2014-3-30 13:30:02

青玄 发表于 2014-3-30 10:40 static/image/common/back.gif
嗯...,你说的用鼠标点了一下右上角的关闭按钮那是消息队列接收到了WM_CLOSE消息的时候,它关闭的是这个程序 ...

恩,再次感谢你的回答。哪什么情况才能触发WM_QUIT这个消息呢?

隨鈊乄鎍慾 发表于 2014-3-30 15:30:53

青玄 发表于 2014-3-30 13:36 static/image/common/back.gif
恩!我测试了一下,如果把 .break .if eax == 0去掉的话,虽然窗口关闭了,可是在系统进程中还是可以看到 ...

哦,哪我可以这样理解吧:如要我们点一下关闭按钮则触发了WM_CLOSE这个消息再然后通过某种方法使EAX的值为0进一步触发了WM_QUIT这个消息退出消息偱环。

青玄 发表于 2014-3-30 15:32:41

恩!应该是这样的!

青玄 发表于 2014-3-30 15:36:26

而且,我想这个应该与PostQuitMessage()这个函数有关,我想这个函数应该是把WM_QUIT的返回值给eax是的消息队列接收到以后就退出了消息循环!

隨鈊乄鎍慾 发表于 2014-3-30 15:39:49

青玄 发表于 2014-3-30 15:36 static/image/common/back.gif
而且,我想这个应该与PostQuitMessage()这个函数有关,我想这个函数应该是把WM_QUIT的返回值给eax是的消息队 ...

恩,有道理!朋友这么热情加个好友吧?

青玄 发表于 2014-3-30 15:41:20

隨鈊乄鎍慾 发表于 2014-3-30 15:39 static/image/common/back.gif
恩,有道理!朋友这么热情加个好友吧?

好啊!你发个请求我加一下就行了!

隨鈊乄鎍慾 发表于 2014-3-30 15:44:09

青玄 发表于 2014-3-30 15:41 static/image/common/back.gif
好啊!你发个请求我加一下就行了!

O了......................
页: [1]
查看完整版本: Win32汇编中这两个关闭有啥区别?