Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445680
  • 博文数量: 63
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 11:33
文章分类
文章存档

2015年(1)

2014年(3)

2013年(7)

2012年(52)

分类: WINDOWS

2012-04-19 12:12:17

窗口的创建过程:
1).使用GetModulHandle获取窗口句柄
GetModuleHandle,lpModuleName

获取一个应用程序或动态链接库的模块句柄
lpModuleName参数是一个指向
含有模块名字字符串的指针
如果返回成功,则返回模块句柄,存放在eax中。如果
lpModuleName为NULL,则返回调用者本模块的句柄

2).注册窗口类
定义一个WNDCLAS***结构类型的变量,对其进行赋值,在调用RegisterClas***函数在系统中注册。
WNDCLAS***的结构定义如下:
WNDCLAS*** STRUCT
cbSize DWORD ? ;结构体的字节数
我们可以用sizeof(WNDCLAS***)来获得准确的值
style DWORD ? ;窗口风格
lpfnWndProc DWORD ? ;窗口过程的地址
cbCl***tra
DWORD ? ;紧跟在窗口类结构后边的字节数
cbWndExtra DWORD ? ;紧跟在窗口事例后的附加字节数
hInstance
DWORD ? ;本模块的事例句柄
hIcon
DWORD ? ;图标的句柄
hCursor
DWORD ? ;光标的句柄
hbrBackground
DWORD ? ;背景色
lpszMenuName
DWORD ? ;指向类名称的指针
hIconSm
DWORD ? ;小图标
WNDCLAS*** ENDS
RegisterClas*** lpClassName
lpClassName参数是窗口类的地址
3).建立窗口
CreateWindowEx, dwExstyle, lpClassName, lpWindowName, dwStyle,\
x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam

dwExstyle和dwStyle决定了窗口的外形和行为,dwStyle是win16开始就有点的属性,dwExstyle是win32中扩展的。
lpClassName:建立窗口使用的类名字符串指针。
lpWindowName:指向窗口名称的字符串。会显示在标题栏中。
x,y:指向窗口左上角位置,单位是像素
nWidth, nHeight:窗口的宽度和高度,单位是像素。
hWndParent:父窗口的句柄,若无父窗口,则为NULL
hMenu:窗口上要出现菜单的句柄。
hInstance:模块句柄,指定了窗口所属的程序模块。
lpParam:指针,指向一个欲传给窗口的参数
4).消息循环
;>>>>>>>>>消息循环
.while TRUE
invoke GetMessage, addr @stMsg,NULL, 0, 0
.break .if eax == 0
invoke TranslateMessage, addr @stMsg
invoke DispatchMessage, addr @stMsg
.endw
GetMessage:从消息队列中取出一条消息,准备处理
TranslateMessage:遇到键盘消息则将扫描码转换成ASCII码,否则不处理
DispatchMessage:将消息发送到窗口对应的窗口过程去处理。


窗口过程
WindowProc proc uses ebx edi esi, hWnd, uMsg, wParam, lParam
mov eax, uMsg

.if eax == WM_XXX
<处理WM_XXX消息>

.elseif eax == WM_YYY
<处理WM_YYY消息>

.elseif eax == WM_CLOSE
invoke DestroyWindow, hWinMain
invoke PostQuitMessage, NULL
.else
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.endif
xor eax, eax
ret
WindowProc endp
阅读(2151) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

XylDll2012-04-20 09:59:02

虾米小: win32汇编 如何设置窗口或控件的字体、字号 ?.....
Font

XylDll2012-04-19 23:19:51

我是月老: 如果返回成功,则返回模块句柄,存放在eax中。如果lpModuleName为NULL,则返回调用者本模块的句柄.....
是的是的,嘿嘿

我是月老2012-04-19 21:56:32

如果返回成功,则返回模块句柄,存放在eax中。如果lpModuleName为NULL,则返回调用者本模块的句柄

虾米小2012-04-19 21:39:07

win32汇编 如何设置窗口或控件的字体、字号 ?