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

还是关于WIN32的问题求助!

小甲鱼在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


志华 发表于 2014-3-29 17:32:18

类名是对应的,其他没所谓。

青玄 发表于 2014-3-29 21:44:16

其实你说的这个窗口类其实就是一个子窗口,它的父窗口就是那个大大的窗体,至于你说的那个字符串其实就是子窗口的一个名字,它是为了,在程序运行的时候能够找到这个窗口,而且那个名字是由地址进行索引的。而且当系统程序接到WM_CREATE消息的时候,子窗口就创建好了!

隨鈊乄鎍慾 发表于 2014-3-30 07:44:18

青玄 发表于 2014-3-29 21:44 static/image/common/back.gif
其实你说的这个窗口类其实就是一个子窗口,它的父窗口就是那个大大的窗体,至于你说的那个字符串其实就是子 ...

恩,谢谢解答。我还是不太懂。因为我没有看到‘‘button’跟任何类挂钩啊还有上面哪个MyClass也是类似的没有看到和什么类挂钩。它们都是如何和各自相对应的类挂钩的?’

青玄 发表于 2014-3-30 10:19:10

嗯..,我想其实是这样的Button类要说挂钩的话它是在回调过程中,等到消息队列接收到WM_CREATE这个消息的时候生成的而回调过程是由系统自身进行调用的,这在注册窗口的时候就已经声明了,而注册窗口,其实它就是szClassName类,而这个类的句柄是在这个程序句柄也就是hInstance里面的,所以,它是这样串起来的,你说的跟任何类没有挂钩,其实Button类的生成完全是接收到了循环队列的消息才生成的。

志华 发表于 2014-3-30 15:45:37

invoke      CreateWindowEx,NULL,\
                              offset szButton,offset szButtonText, 这里要的是一个类名,而类名就是一个0结尾的字符串。也就是button.

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

志华 发表于 2014-3-30 15:45 static/image/common/back.gif
invoke      CreateWindowEx,NULL,\
                              offset szButton,offset szButto ...

哪假如我把定义常量的 'button', 0改为其它字符如'fishc',0 也是可以的吧它会把字符'fishc'命名本窗口的类名吧?

志华 发表于 2014-3-30 16:01:55

不是命名窗口的类名,而是指定一个控件的类名。你要用fishc当类名,那你得先有一个类名叫fishc的控件。

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

志华 发表于 2014-3-30 16:01 static/image/common/back.gif
不是命名窗口的类名,而是指定一个控件的类名。你要用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’’字符能不能用其它名?

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

志华 发表于 2014-3-30 16:57 static/image/common/back.gif
类名是对应的,其他没所谓。

恩,明白了。谢谢
页: [1]
查看完整版本: 还是关于WIN32的问题求助!