隨鈊乄鎍慾 发表于 2014-3-29 17:08:41

在WIN32课程中这两个句柄有啥区别?

在小甲鱼WIN32视频课程第32讲中的过程函数当中这两个句柄应该一样的吧?如下:
; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\
                                WS_CHILD or WS_VISIBLE,\
                                10,10,88,22,\
                                hWnd,1,hInstance,NULL//小甲鱼说这里的hWnd是父窗口句柄(是默认存放在这里的)
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        invoke        DestroyWindow,hWinMain//哪为什么这里不用hWnd而要用主程序中的窗口句柄hWinMain呢?
                        invoke        PostQuitMessage,NULL
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam

青玄 发表于 2014-3-29 21:56:46

嗯....,我是这样理解的,hInstance是程序的句柄,hWinMain是主窗口的句柄,而hWnd这个句柄,我看了一下回调过程,这个的句柄只有在定义回调过程的时候出现过,由此我想它应该是过程的句柄吧!

青玄 发表于 2014-3-29 22:00:17

而且在调用DestroyWindow这个函数,它的句柄其实就是hWinMain,因为它最终毁掉的是整个主窗口嘛!所以要主窗口的句柄!

隨鈊乄鎍慾 发表于 2014-3-30 07:28:51

青玄 发表于 2014-3-29 22:00 static/image/common/back.gif
而且在调用DestroyWindow这个函数,它的句柄其实就是hWinMain,因为它最终毁掉的是整个主窗口嘛!所以要主窗 ...

如果是过程句柄的话,哪么小甲鱼视频中的讲解就有误吧?!他说的是父窗口句柄。

青玄 发表于 2014-3-30 11:09:34

嗯...,其实我想是这样的,hWnd它是窗口句柄,而你说的hWinMain它是入口函数的句柄这不是一个东西,窗口句柄它指示的是一个窗口,而hWinMain它指示的是一个函数,在系统调用的时候是各自操作各自的。句柄则像一个指针一样,为了让系统能够操作他们,系统会给他们各自的编号,窗口句柄有窗口句柄的编号,函数句柄有函数句柄的编号,这样系统就可以找到它们了。亲!懂了吗!

志华 发表于 2014-3-30 15:42:02

这俩不是一个东西吗,都是主窗口句柄。用哪个都可以关闭窗口。
上面说的hWnd是相对于button来说是父窗口句柄。

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

志华 发表于 2014-3-30 15:42 static/image/common/back.gif
这俩不是一个东西吗,都是主窗口句柄。用哪个都可以关闭窗口。
上面说的hWnd是相对于button来说是父窗口句 ...

还是有区别的!我如果在过程(函数)中把hWnd全换成全局的hWinMain则程序不能正常显示出来

志华 发表于 2014-3-30 15:56:09

隨鈊乄鎍慾 发表于 2014-3-30 15:51 static/image/common/back.gif
还是有区别的!我如果在过程(函数)中把hWnd全换成全局的hWinMain则程序不能正常显示出来

hWndMain不是从过程里面的hWnd这个值保存的吗?
我猜上面的hWndMain是下面这样来的。
WM_CREATE
push hWnd
pop hWndMain

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

志华 发表于 2014-3-30 15:56 static/image/common/back.gif
hWndMain不是从过程里面的hWnd这个值保存的吗?
我猜上面的hWndMain是下面这样来的。
WM_CREATE


; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\
                                WS_CHILD or WS_VISIBLE,\
                                10,10,88,22,\
                                hWnd,1,hInstance,NULL//如果这里我把hWnd换成hWndMain则主窗口能显示但子窗口按钮没有显示

志华 发表于 2014-3-30 16:21:09

隨鈊乄鎍慾 发表于 2014-3-30 16:15 static/image/common/back.gif
; 建立一个按钮
;********************************************************************
                .elseif        e ...

这个时候hWndMain还没有保存吧。

隨鈊乄鎍慾 发表于 2014-3-30 16:25:51

志华 发表于 2014-3-30 16:21 static/image/common/back.gif
这个时候hWndMain还没有保存吧。

不会hWndMain是全局的

志华 发表于 2014-3-30 16:30:23

哦。是我搞错,我把这个窗口当成Dialog的窗口了。
hWndMain在CreateWindw的时候就有了。

那年`逝去 发表于 2014-4-7 23:55:00

看大神回答学习学习
页: [1]
查看完整版本: 在WIN32课程中这两个句柄有啥区别?