还是关于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
类名是对应的,其他没所谓。 其实你说的这个窗口类其实就是一个子窗口,它的父窗口就是那个大大的窗体,至于你说的那个字符串其实就是子窗口的一个名字,它是为了,在程序运行的时候能够找到这个窗口,而且那个名字是由地址进行索引的。而且当系统程序接到WM_CREATE消息的时候,子窗口就创建好了!
青玄 发表于 2014-3-29 21:44 static/image/common/back.gif
其实你说的这个窗口类其实就是一个子窗口,它的父窗口就是那个大大的窗体,至于你说的那个字符串其实就是子 ...
恩,谢谢解答。我还是不太懂。因为我没有看到‘‘button’跟任何类挂钩啊还有上面哪个MyClass也是类似的没有看到和什么类挂钩。它们都是如何和各自相对应的类挂钩的?’ 嗯..,我想其实是这样的Button类要说挂钩的话它是在回调过程中,等到消息队列接收到WM_CREATE这个消息的时候生成的而回调过程是由系统自身进行调用的,这在注册窗口的时候就已经声明了,而注册窗口,其实它就是szClassName类,而这个类的句柄是在这个程序句柄也就是hInstance里面的,所以,它是这样串起来的,你说的跟任何类没有挂钩,其实Button类的生成完全是接收到了循环队列的消息才生成的。 invoke CreateWindowEx,NULL,\
offset szButton,offset szButtonText, 这里要的是一个类名,而类名就是一个0结尾的字符串。也就是button. 志华 发表于 2014-3-30 15:45 static/image/common/back.gif
invoke CreateWindowEx,NULL,\
offset szButton,offset szButto ...
哪假如我把定义常量的 'button', 0改为其它字符如'fishc',0 也是可以的吧它会把字符'fishc'命名本窗口的类名吧? 不是命名窗口的类名,而是指定一个控件的类名。你要用fishc当类名,那你得先有一个类名叫fishc的控件。 志华 发表于 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 16:57 static/image/common/back.gif
类名是对应的,其他没所谓。
恩,明白了。谢谢
页:
[1]