鱼C论坛

 找回密码
 立即注册
查看: 1689|回复: 9

还是关于WIN32的问题求助!

[复制链接]
发表于 2014-3-29 17:32:17 | 显示全部楼层 |阅读模式
10鱼币
小甲鱼在WIN32视频课程第32讲提到:; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWinMain        dd                ?

                .const
szClassName                db        'MyClass',0
szCaptionMain        db        'My first Window !',0
szText                        db        'Welcome to fishc.com!',0
szButton                db        'button', 0//这里定义的是一个字符串吧,它是如何指向一个类的?
szButtonText        db        '鱼C工作室', 0
szOpen                        db        'open', 0
szURL                        db        'http://www.fishc.com'
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 窗口过程:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam
                local        @stPs:PAINTSTRUCT
                local        @stRect:RECT
                local        @hDc

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

                        invoke        GetClientRect,hWnd,addr @stRect
                        invoke        DrawText,@hDc,addr szText,-1,\
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER

                        invoke        EndPaint,hWnd,addr @stPs
                .elseif eax == WM_COMMAND                                           ;当按下按钮的时候
                        mov        eax, wParam
                       
                        .if        ax == IDOK
                                invoke        ShellExecute, NULL, offset szOpen,\
                                        offset szURL, NULL, NULL, SW_SHOWNORMAL
                        .endif       
;********************************************************************
; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\//这个szButton明明指向的是一个字符串的地址怎么会指向一个按钮类呢?
                                WS_CHILD or WS_VISIBLE,\
                                10,10,88,22,\
                                hWnd,1,hInstance,NULL
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp


最佳答案

查看完整内容

类名是对应的,其他没所谓。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-29 17:32:18 | 显示全部楼层
类名是对应的,其他没所谓。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-29 21:44:16 | 显示全部楼层
其实你说的这个窗口类其实就是一个子窗口,它的父窗口就是那个大大的窗体,至于你说的那个字符串其实就是子窗口的一个名字,它是为了,在程序运行的时候能够找到这个窗口,而且那个名字是由地址进行索引的。而且当系统程序接到WM_CREATE消息的时候,子窗口就创建好了!
QQ截图20140329214255.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

恩,谢谢解答。我还是不太懂。因为我没有看到‘‘button’跟任何类挂钩啊还有上面哪个MyClass也是类似的没有看到和什么类挂钩。它们都是如何和各自相对应的类挂钩的?’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 10:19:10 | 显示全部楼层
嗯..,我想其实是这样的Button类要说挂钩的话它是在回调过程中,等到消息队列接收到WM_CREATE这个消息的时候生成的而回调过程是由系统自身进行调用的,这在注册窗口的时候就已经声明了,而注册窗口,其实它就是szClassName类,而这个类的句柄是在这个程序句柄也就是hInstance里面的,所以,它是这样串起来的,你说的跟任何类没有挂钩,其实Button类的生成完全是接收到了循环队列的消息才生成的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 15:45:37 | 显示全部楼层
invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText, 这里要的是一个类名,而类名就是一个0结尾的字符串。也就是button.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 15:56:33 | 显示全部楼层
志华 发表于 2014-3-30 15:45
invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButto ...

哪假如我把定义常量的 'button', 0改为其它字符如'fishc',0 也是可以的吧它会把字符'fishc'命名本窗口的类名吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-30 16:01:55 | 显示全部楼层
不是命名窗口的类名,而是指定一个控件的类名。你要用fishc当类名,那你得先有一个类名叫fishc的控件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 16:08:11 | 显示全部楼层
志华 发表于 2014-3-30 16:01
不是命名窗口的类名,而是指定一个控件的类名。你要用fishc当类名,那你得先有一个类名叫fishc的控件。

; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\
                                WS_CHILD or WS_VISIBLE,\
                                10,10,88,22,\
                                hWnd,1,hInstance,NULL//其中offset szButtonText这个是对应的按钮名.offset szButton这个对应的‘‘button’’字符能不能用其它名?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-30 18:02:29 | 显示全部楼层
志华 发表于 2014-3-30 16:57
类名是对应的,其他没所谓。

恩,明白了。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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