`
deepfuture
  • 浏览: 4435359 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80429
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70936
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:104254
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:287792
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15192
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:68541
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32647
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46347
社区版块
存档分类
最新评论

一个WIN32汇编的完整窗口入门程序的理解与注释

阅读更多

  ;WIN32汇编的注释是;,其实WIN32汇编和VC有很多地方是相通的,为了加深印象,亲自打完这段长长的代码并
;加上注释和个人理解


.386
.model flat,stdcall
option casemap:none

;以下定义INCLUDE文件
include winows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
include kernel32.lib
;以下定义数据段
.data ? ;定义变量
hinstance dd ?
hwinmain dd ?
.const ;定义常量,字符串全部要以0结尾,因为在内存中0是字符串的结束符
szclassname db 'billclass',0
szcaptionmain db 'bill's firt program',0
sztext db 'WIN32汇编,BILL!!!!',0
;以下是代码段
.code
;定义窗口过程
_procwinmain proc uses ebx edi esi,hwnd,umsg,wparam,lparam
;定义局部变量用关键字local
local @stps:PAINTSTRUCT
local @strect:PAINTSTRUCT
local @hdc
mov eax,umsg ;取得传入过程的消息变量值
;-----------下面开始根据消息类型的不同作出不同的处理
.if eax == WM_PAINT ;如果消息是窗口绘制
invoke BeginPaint,hwnd,addr@stRect;WIN32汇编调用API程序后,API程序将返回值放在EAX中,
;客户区准备
mov @hdc,eax;取得设备句柄

invoke GetclientRect,hwnd,addr @stRect;addr是取变量的地址但只能用在INVOKE语句中且
;不能同时使用
;EAX寄存器传参数,因为ADDR会用到EAX。
;此API的含义是取得描述客户区的结构放在@stRect
invoke drawText,@hdc,addr sztext,-1,addr @stRect,\
DT_SINGLELINE or DT_CENTER or DT_VCENTER ;语句换行符是\,显示'WIN32汇编,BIL
;L!!!!',并设置其为单行DT_SINGLE
;等等LINE
invoke EndPaint,hwnd,addr @stPs
  .elseifmeax==WM_CLOSE
invoke DestroyWindow,hwinmain ;销毁窗口
invoke PostQuitMessage,Null ;向消息循环中发出退出消息
.else
invoke DefWindowProc,hwnd,uMsg,wPara,lParam;如果不是上述消息,则执行WINDOWS标准的默认消息处
;理,如键盘等消息
ret;返回
.endif

xor eax,eax ;eax清0
ret
_ProcWinMain endp
;以上这个子程序处理窗口消息的,是窗口的回调函数,该项函数不是我们调用,是由WINDOWS调用用来处理
;窗口消息的,我们调用的是DispatchMessage,DispatchMessage再回过头来调用窗口过程。
_WinMain Proc ;主程序
local @stWndClass:WNDCLASSEX
local @stmsg:MSG

invoke GetModuleHandle,Null ;得到应用程序句柄
mov hInstance,eax ;将应用程序的句柄放入hInstance变量
invoke RtlZeroMemory,addr @stWndClass,sizeof WndClassEX ;msdn的解释TheRtlZeroMemory routine
;fills a block of memory with zeros,即
;0填充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,offsetszcaptionmain,\
WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,\
NULL,hinstance,NULL ;建立窗口并返回句柄在EAX中
mov hwinMain,eax ;刚创建的窗口句柄赋值
invoke showwindow,hwinmain,SW_SHOWNORMAL ;显示窗口
invoke updatewindow,hwinmain ;刷新窗口客户区,导致客户区窗口paint
;消息循环,win32汇编得自行建立WINDOWS消息循环,不过这样更自由,可以彻底地控制程序
.while true
 invoke GetMessage,addr @stMsg,null,0,0 ;WINDOWS在系统内部有个系统消息队列,
            ;并为每个应用程序还维护了一个消息队列,将这些属于这些程序窗口范围内的
            ;系统消息发到该应用程序消息队伍中,这个API的作用就是从自己的应用程序
            ;消息队伍中接收消息。
  .break .if eax==0 ;If the function retrieves the WM_QUIT message, the return value is zero.
            ;invoke Translate(msdn),也就是说,当程序退出里,消息队伍里会有WM_QUIT消息,            ;就退出循环,意味着退出程序。
  invoke translatemessage,addr @stmsg;由应用程序对消息进行预处理,如把基于键盘扫描码的按键消息黑心                   ;换成ASCII码的键盘消息等
  invoke dispatchmessage,addr@stmsg ;将预处理好的消息发给WINDOWS,WINDOWS将其分派给该程序的相应窗;口处理过程处理,那么WINDOWS怎么知道窗口处理过程在哪呢,刚才不是已经注册过窗口类了,这就是为什么窗口;类要注册的原因了,那么为什么不能由程序自己处理消息,非得发给WINDOWS呢,其一、一个应有程序的窗口很多,如果自己处理的话,得建立一个窗口列表,上面记录每个窗口的窗口处理过程。其二、WINDOWS对于一些实时性很;强的信息采用直接调用窗口处理过程的方法。
.endw
ret
_winmain endp
;没有下面的代码程序无法执行,因为START语句指定程序启动的入口点
start:
call _winmain
invoke ExitProcess,NULL;退出
end start

 

0
0
分享到:
评论

相关推荐

    WIN32汇编程序源码级调试_VS2019_vs2019win32汇编_vs2019win32汇编_Win32汇编程序_汇编语言

    本文将详细探讨"WIN32汇编程序源码级调试_VS2019"这一主题,包括如何在Visual Studio 2019(VS2019)环境下编写和调试Win32汇编程序,以及如何实现一个学生管理系统。 首先,让我们了解Win32汇编。Win32汇编是针对...

    Win32汇编实现可接受拖放文件的窗口

    本项目"Win32汇编实现可接受拖放文件的窗口"专注于利用Win32 API来创建一个窗口,该窗口能够接收用户通过拖放操作传递的多个文件,并在接收到文件时显示相关信息。 首先,我们需要理解Windows消息机制。在Win32 API...

    win32汇编语言入门

    ### Win32汇编语言入门知识点详解 #### 一、为何学习汇编语言? 学习汇编语言对于深入了解计算机系统的工作原理至关重要。它被视为计算机科学领域的一门基础学科,被比喻为计算机软件技术的“原子学说”。理解汇编...

    Win32汇编程序设计

    《Win32汇编程序设计》是一本深入探讨在Windows 32位环境下编写汇编语言程序的专业书籍。汇编语言是一种低级编程语言,它与计算机硬件的指令集紧密相关,提供了对计算机硬件功能的直接控制。在Win32平台上,汇编语言...

    Win32汇编 Win32汇编

    Win32汇编语言是计算机科学的一个重要领域,它是一种低级编程语言,直接与Windows操作系统接口进行交互。在深入探讨之前,让我们先明确一点:Win32汇编并不是一个独立的语言,而是指使用Intel x86架构上的汇编语言来...

    魔板1.0 Win32汇编完整源代码

    "魔板1.0 Win32汇编完整源代码"是一个软件开发项目,其中包含用于创建一个名为“魔板”的小游戏的源代码。这个项目的编程语言是Win32汇编,这是一种低级语言,专门针对Windows 32位操作系统进行程序设计。 【描述...

    Win32汇编语言程序设计

    《Win32汇编语言程序设计》一书深入讲解了如何在Windows环境下编写汇编语言程序,特别是关于Win32 API的使用。汇编语言在系统底层编程、性能优化和理解计算机工作原理等方面有着不可替代的作用。以下是该主题的一些...

    学习win32汇编-初级入门

    Win32应用程序虽然和其他32位应用程序(例如32位保护模式DOS程序)一样可以使用386汇编语言和保护模式编程,但是Win32应用程序的执行机制与其他32位应用程序有一定的差别,例如消息循环、动态链接等,Win32汇编语言...

    win32汇编服务管理程序

    "win32汇编服务管理程序"就是一个使用Win32汇编语言编写的工具,它能够帮助用户创建、修改、启动、停止或查询系统服务的状态。这个程序利用了Windows API中的服务管理功能,通过底层的汇编语言编程,提高了执行效率...

    Win32汇编语言程序设计教程

    7. **调试与反汇编**:学会使用调试工具如OllyDbg或DebugView,以及阅读反汇编代码,有助于理解程序运行过程中的问题和优化代码。 8. **内存管理**:了解堆栈的工作原理、动态内存分配以及如何管理内存,是编写复杂...

    win32汇编语言程序设计

    《Win32汇编语言程序设计》一书由罗云彬撰写,主要探讨了在Windows环境下32位汇编语言的编程技术。汇编语言,作为计算机底层编程的基础,是直接对应机器指令集的编程语言,对于理解计算机硬件工作原理和优化性能有着...

    WIN32汇编程序设计详尽教程

    总的来说,《WIN32汇编程序设计详尽教程》是一本全面介绍Win32汇编语言编程的资源,对于想要深入学习这一领域的学习者来说,是一个宝贵的资料。通过学习和实践,你可以提升自己的编程技能,更好地理解和控制Windows...

    Win32汇编写的俄罗斯方块小程序

    在编程的世界里,Win32汇编语言是一种底层的编程语言,它直接与计算机硬件交互,提供了对系统资源的直接控制。本篇文章将深入探讨如何使用Win32汇编语言编写一个简单的俄罗斯方块小游戏,以此来展示汇编语言的强大...

    Win32汇编源码

    Win32汇编源码是计算机编程领域中的一个重要分支,主要关注的是在Windows操作系统环境下,用汇编语言编写程序的方法。汇编语言是一种低级语言,它的指令与计算机硬件的机器语言非常接近,使得程序员可以直接控制...

    Win32汇编语言教程

    Win32汇编语言与32位保护模式DOS程序的汇编语言有区别,它涉及到Windows操作系统特有的执行机制,如消息循环和动态链接。 **Win32汇编语言的特点和应用** Win32汇编语言允许程序员直接控制硬件资源,提供更高效的...

    Win32汇编语言程序设计(罗云彬)

    《Win32汇编语言程序设计》是罗云彬撰写的一本深入讲解Windows平台上汇编语言编程的专业书籍。这本书旨在帮助读者理解计算机底层工作原理,掌握Win32环境下汇编语言的编写技巧,以及如何利用汇编语言与高级语言如C++...

    Win32汇编程序设计教程

    为了让网友们能更好的学习Win32汇编编程,于是我为大家将网上的资料整理成一个帮助文件。 本帮助文件包括:Iczelion的Win32汇编教程、Iczelion 的 ODBC 教程、Iczelion 的 VxD 教程共三部分 作者简介: 姓名:...

    win32汇编教程

    win32汇编教程。... 为了让网友们能更好的学习Win32汇编编程,于是我为大家将网上的资料整理成一个帮助文件。 本帮助文件包括:Iczelion的Win32汇编教程、Iczelion 的 ODBC 教程、Iczelion 的 VxD 教程共三部分

Global site tag (gtag.js) - Google Analytics