鱼C论坛

 找回密码
 立即注册
查看: 2230|回复: 12

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

[复制链接]
发表于 2014-3-29 17:08:41 | 显示全部楼层 |阅读模式
10鱼币
在小甲鱼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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-29 21:56:46 | 显示全部楼层
嗯....,我是这样理解的,hInstance是程序的句柄,hWinMain是主窗口的句柄,而hWnd这个句柄,我看了一下回调过程,这个的句柄只有在定义回调过程的时候出现过,由此我想它应该是过程的句柄吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-29 22:00:17 | 显示全部楼层
而且在调用DestroyWindow这个函数,它的句柄其实就是hWinMain,因为它最终毁掉的是整个主窗口嘛!所以要主窗口的句柄!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 07:28:51 | 显示全部楼层

如果是过程句柄的话,哪么小甲鱼视频中的讲解就有误吧?!他说的是父窗口句柄。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 11:09:34 | 显示全部楼层
嗯...,其实我想是这样的,hWnd它是窗口句柄,而你说的hWinMain它是入口函数的句柄这不是一个东西,窗口句柄它指示的是一个窗口,而hWinMain它指示的是一个函数,在系统调用的时候是各自操作各自的。句柄则像一个指针一样,为了让系统能够操作他们,系统会给他们各自的编号,窗口句柄有窗口句柄的编号,函数句柄有函数句柄的编号,这样系统就可以找到它们了。亲!懂了吗!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 15:42:02 | 显示全部楼层
这俩不是一个东西吗,都是主窗口句柄。用哪个都可以关闭窗口。
上面说的hWnd是相对于button来说是父窗口句柄。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 15:51:42 | 显示全部楼层
志华 发表于 2014-3-30 15:42
这俩不是一个东西吗,都是主窗口句柄。用哪个都可以关闭窗口。
上面说的hWnd是相对于button来说是父窗口句 ...

还是有区别的!我如果在过程(函数)中把hWnd全换成全局的hWinMain则程序不能正常显示出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 15:56:09 | 显示全部楼层
隨鈊乄鎍慾 发表于 2014-3-30 15:51
还是有区别的!我如果在过程(函数)中把hWnd全换成全局的hWinMain则程序不能正常显示出来

hWndMain不是从过程里面的hWnd这个值保存的吗?
我猜上面的hWndMain是下面这样来的。
WM_CREATE
push hWnd
pop hWndMain
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 16:15:16 | 显示全部楼层
志华 发表于 2014-3-30 15:56
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则主窗口能显示但子窗口按钮没有显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 16:21:09 | 显示全部楼层
隨鈊乄鎍慾 发表于 2014-3-30 16:15
; 建立一个按钮
;********************************************************************
                .elseif        e ...

这个时候hWndMain还没有保存吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 16:25:51 | 显示全部楼层
志华 发表于 2014-3-30 16:21
这个时候hWndMain还没有保存吧。

不会hWndMain是全局的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 16:30:23 | 显示全部楼层
哦。是我搞错,我把这个窗口当成Dialog的窗口了。
hWndMain在CreateWindw的时候就有了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-7 23:55:00 | 显示全部楼层
看大神回答  学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表