按钮的判断和建立一可以编辑的文本框
.386.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include shell32.inc
includelib shell32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
button1 equ 1
button2 equ 2
edit2 equ 3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
zWindow dd ?
.data
jledit db '555555',0
.const
szClassName db 'MyClass',0
szCaptionMain db 'My first Window !',0
szButton db 'button', 0
szButtonText db '退 出', 0
szOpen db 'open', 0
szButtonText2 db '打开CMD', 0
szURL db'cmd.exe',0
szedit db'EDIT',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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,NULL,-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
.else
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
.endif
;********************************************************************
; 建立一个按钮
;********************************************************************
.elseif eax == WM_CREATE
invoke CreateWindowEx,NULL,\
offset szButton,offset szButtonText2,\
WS_CHILD or WS_VISIBLE,\
920,700,88,22,\
hWnd,button1,hInstance,NULL
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\ ;这里建立一个文本框
offset szedit,offset jledit,\
WS_CHILD or WS_VISIBLE,\
100,100,800,500,\
hWnd,edit2,hInstance,NULL
mov zWindow,eax
invoke CreateWindowEx,NULL,\ ;这是第二个按钮
offset szButton,offset szButtonText,\
WS_CHILD or WS_VISIBLE,\
920,730,88,22,\
hWnd,button2,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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
WS_POPUPWINDOW,\
100,100,600,400,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_MAXIMIZE
invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg ;Translate翻译
invoke DispatchMessage,addr @stMsg ;Dispatch派遣
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
这个程序里建立了按钮 我不明白按钮建立到按下按钮我都没有看到发送消息的函数代码sendmessage
.if ax == IDOK 这个IDOK是怎么来的发送按钮消息会发送一个ID 假如我要建立3个,4个按钮或者更多
那ax == ?怎么判断那个按钮发出来的消息?
建立edit类 为什么程序一闪就没有了?
sd53852728 发表于 2014-1-13 23:03 static/image/common/back.gif
按钮的问题我找到答案了 谢谢我还有一个建立打字的文本框没成功还有待解决
如果是单纯的EDIT编辑框,我发表过一个记事本的源码,也是win32写的,你可以去我空间看看 IDOK是你资源中自己定义的啊,IDOK你还要#define定义一下呢
如果多定义几个完全可以:
#define IDOK1 0X1001
#define IDOK2 0X1002
#define IDOK3 0X1003
#define IDOK4 0X1004
wParam的低16位就是控件的ID比如你按下了IDOK4那么wParam的低16位就是0x1004这样就可以判断按下哪个按钮了 F:\78523.jpg 能说的详细一点吗 谢谢
按钮的问题我找到答案了 谢谢我还有一个建立打字的文本框没成功还有待解决 好的 谢谢{:7_156:} 学习了。高手多多啊
页:
[1]