鱼C论坛

 找回密码
 立即注册
查看: 2818|回复: 7

[汇编作业] 一个汇编写的窗口,对着书敲得,加了些注释。

[复制链接]
发表于 2013-8-2 09:20:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include gdi32.inc
includelib gdi32.lib
include kernel32.inc
includelib kernel32.lib

.data
hInstance dd ? ;实例句柄
hWinMain dd ?  ;窗体句柄
;rectx   dd ?

.const
szClassName db 'ssyclass',0  ;窗口类名
szCaptionName db 'mywindow',0 ;窗口标题
szText db 'hello world',0    ;客户区显示内容

.code
;窗口过程函数
_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam  ;.uses ebx edi esi这句是让编译器在
                                                                  ;函数中用push,pop指令保护这三个寄存器的值
  local @stPs:PAINTSTRUCT
  local @stRect:RECT
  local @hDc
        
  mov eax,uMsg
   
   
    .if eax==WM_PAINT
    invoke BeginPaint,hWnd,addr @stPs   ;BeginPaint函数为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到一个
                                                    ;PAINTSTRUCT结构中。
    mov @hDc,eax ;返回设备环境句柄
   
    invoke GetClientRect,hWnd,addr @stRect    ;获取客户区的坐标
    ;invoke DrawText,@hDc,addr szText,-1,\     ;在目标区域绘制 -1自动设置大小
    ;       addr @stRect,\
        
     ;  invoke DrawText,@hDc,addr @stRect.top,-1,\     ;在目标区域绘制 -1自动设置大小
    ;       addr @stRect,\
        
    invoke TextOut,@hDc,NULL,NULL,addr szText,sizeof szText-1
        
        ;DT_SINGLELINE or DT_CENTER or DT_VCENTER
    invoke EndPaint,hWnd,addr @stPs
   
   
    .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   ;声明个 WNDCLASSEX结构体的局部变量@stWndClass
local @stMsg:MSG               ;声明 MSG结构体的局部变量 @stMsg 消息结构体
invoke GetModuleHandle,NULL    ;获得当前实例句柄
mov hInstance,eax              ;返回值在eax hInstance中
invoke RtlZeroMemory,addr @stWndClass,sizeof WNDCLASSEX ;初始化WNDCLASSEX,全置0

;注册窗口类
invoke LoadCursor,0,IDC_WAIT     ;装载光标 IDC WAIT 为漏斗光标
mov @stWndClass.hCursor,eax      ;函数返回光标句柄
push hInstance
pop @stWndClass.hInstance        ;把实例句柄压栈再弹到结构体里
mov @stWndClass.cbSize,sizeof WNDCLASSEX ;把窗口类结构体占的字节放在cbSize中
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW  ;在水平或垂直方向窗口大小变化时重绘窗口
mov @stWndClass.lpfnWndProc,offset _ProcWinMain  ;把窗口过程函数地址给lpfnWndProc
mov @stWndClass.hbrBackground,COLOR_WINDOW+10     ;设置背景色
mov @stWndClass.lpszClassName,offset szClassName  ;把窗口类名地址给lpszClassName
invoke RegisterClassEx,addr @stWndClass  ;注册窗口
;建立并显示窗口
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\  ;窗口的扩展风格 指定窗口有一个带阴影的边界。
                      offset szClassName,\  ; 指向注册类名的指针
       offset szCaptionName,\  ;指向窗口名称的指针
       WS_OVERLAPPEDWINDOW,\  ;窗口风格
       100,100,100,100,\  ;水平位置 垂直位置 宽度 高度
       NULL,NULL,hInstance,NULL  ;
mov hWinMain,eax     ;CreateWindowEx返回窗口句柄
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;消息循环
.while TRUE
       invoke  GetMessage,addr @stMsg,NULL,0,0
    .break .if eax==0
    invoke TranslateMessage,addr @stMsg
    invoke DispatchMessage,addr @stMsg
.endw
ret
     
_WinMain endp
start:
        call _WinMain
  invoke ExitProcess,NULL
  end start
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-2 09:20:46 | 显示全部楼层
自顶一下先
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-2 09:29:31 | 显示全部楼层
辛苦了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-2 10:20:02 | 显示全部楼层
我好晕,更更把前面三江看完:sweat::sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-2 11:15:18 | 显示全部楼层
前三章东西少,第五章开始多了,不过那么多的函数参数真是不好记
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-2 11:54:04 | 显示全部楼层
支持楼主,win32汇编实现窗口比win32 api简单些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-4 23:39:50 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-2-5 07:54:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 05:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表