| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1167 人关注过本帖
标题:请教:win32汇编生成按钮问题
只看楼主 加入收藏
happycookie
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-8-16
收藏
 问题点数:0 回复次数:4 
请教:win32汇编生成按钮问题

是用CreateWindowEx函数吗

类型是BS_PUSHBUTTON吗

搜索更多相关主题的帖子: 汇编 按钮 PUSHBUTTON 函数 
2007-09-02 10:18
cham
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-9-19
收藏
得分:0 

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

BUTTONID equ 1
.const
szClassName db 'MYCLASS',0
szCaption db 'MY WINDOW',0
szText db '创建按钮',0
ButtonClassName db 'BUTTON',0
ButtonText db 'My Button',0

.data?
hInstance dd ?
hWinMain dd ?

.code
_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam
LOCAL PS:PAINTSTRUCT
LOCAL @Rect:RECT
LOCAL hdc
mov eax,uMsg
.if eax==WM_PAINT
invoke BeginPaint,hWnd,addr PS
mov hdc,eax
invoke GetClientRect,hWnd,addr @Rect
invoke DrawText,hdc,addr szText,-1,addr @Rect,DT_TOP
invoke EndPaint,hWnd,addr PS
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWnd
.elseif eax==WM_DESTROY
invoke PostQuitMessage,NULL
.elseif eax==WM_CREATE
invoke CreateWindowEx,NULL,addr ButtonClassName,addr ButtonText,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,200,200,140,20,hWnd,BUTTONID,hInstance,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret

_ProcWinMain endp
_WinMain proc
LOCAL WC:WNDCLASSEX
LOCAL msg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr WC,sizeof WC
invoke LoadCursor,NULL,IDC_CROSS
mov WC.hCursor, eax
invoke LoadIcon,NULL,IDI_APPLICATION
mov WC.hIcon,eax
push hInstance
pop WC.hInstance
mov WC.cbSize,sizeof WNDCLASSEX
mov WC.style,CS_HREDRAW or CS_VREDRAW
mov WC.lpfnWndProc,offset _ProcWinMain
mov WC.cbClsExtra,0
mov WC.cbWndExtra,0
mov WC.hbrBackground,COLOR_WINDOW+1
mov WC.lpszMenuName,NULL
mov WC.lpszClassName,offset szClassName
invoke RegisterClassEx,addr WC
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\

offset szClassName,offset szCaption,\

WS_OVERLAPPEDWINDOW,\

100,100,600,400,\

NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
.while TRUE
invoke GetMessage,addr msg,NULL,0,0
.break .if (!eax)
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endw
mov eax,msg.wParam
ret
_WinMain endp


start:
call _WinMain
invoke ExitProcess,eax
end start

注意GetMessage函数的第二个参数,应为NULL,如果写了hWinMian的话,子窗口不会退出的,俺吃过亏了!

[此贴子已经被作者于2007-9-19 18:39:05编辑过]


2007-09-19 18:31
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
收藏
得分:0 
关键是类名'BUTTON'

win32汇编
病毒 加密
目前兴趣所在
2007-09-19 19:57
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
收藏
得分:0 
你们 真是好人啊,我找了 好久 才发现 。。。。谢谢。
2011-08-24 21:41
怪人老三
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-2-23
收藏
得分:0 
怎么给按钮写一个事件?
2012-02-23 01:28
快速回复:请教:win32汇编生成按钮问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017191 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved