MASMPlus汇编之简单窗体
- .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
- ;数据段
- .data? ;变量声明
- hInstance dd ?
- hWinMain dd ?
- .const;常量声明
- szClassName db 'MyClass',0
- szCptionMain db 'myfirstwindow!',0
- szText db 'win32 assembly,simpler and powerful',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,addr szText,-1,\
- addr @stRect,\
- 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函数结束
- _ProcWinMain endp
- ; _WinMain子函数
- _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 szCptionMain,\
- 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 @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
http://blog.csdn.net/earbao/article/details/11931007
MASMPlus汇编之简单窗体的更多相关文章
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...
- 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- C#简单窗体应用程序(三)
使用C#创建窗体应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:设计歌曲列表界面,效果如下: 第一步:创建项目: ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战需求分析1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain—创建窗体 BallJPanel—画小 ...
- 20135239益西拉姆 Linux内核分析 汇编一个简单的c程序并分析其指令过程
益西拉姆+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一周linux内核分析 学习笔记 一.计算机 ...
- 转:简单窗体振动-WaitForSingleObject,消息,winapi
http://www.cnblogs.com/Jekhn/archive/2012/08/25/2656656.html 线程,消息函数,SetWindowPos设置窗体位置 if WaitForSi ...
- C#简单窗体应用程序(二)
使用C#创建控制台应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:设计登录界面,效果如下: 第一步:创建项目: 文 ...
- C#简单窗体应用程序(一)
使用C#创建控制台应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:创建一个Windows窗体应用程序,在窗体中添加 ...
- GUI——AWT框架和容器,创建简单窗体
GUI概述:GUI(Graphical User Interface)—图形化用户界面.用户和程序之间可以通过GUI能方便友好地进行交互,在Java语言中,JFC(Java Foundation Cl ...
随机推荐
- node转发formdata
router.post('/keUpload', checkLogin, setAccessControlAllow, (req, res, next) => { const busboy = ...
- 微服务学习笔记(1)——使用MagicOnion实现gRPC
原文:微服务学习笔记(1)--使用MagicOnion实现gRPC 1.什么是gRPC 官方文档:https://grpc.io/docs/guides/index.html 2.什么是MagicOn ...
- jQuery+ localStorage 实现一个简易的计时器
原型 图片发自简书App 需求1.关闭浏览器时时间继续运行2.刷新时保持当前状态3.结束时间保存在客户端 <div class="wrapper"> <div c ...
- WPF入门(三)->几何图形之不规则图形(PathGeometry)
原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) 前面我们给大家介绍了LineGeometry,EllipseGeometry,CombinedGeometry等一些规 ...
- WPF 在绘图控件(Shape)中添加文字 [2018.7.15]
原文:WPF 在绘图控件(Shape)中添加文字 [2018.7.15] Q:使用Shape的子类Ellipse画一个圆,如何在圆中添加文字? A:Shape类中不包含Text属性.可使用Shape类 ...
- SQL表的最基本操作练习
use test go --select * from stu2 drop table stu2--删除表 go create table stu2 --新建一个名为stu2表 ( id int pr ...
- Vue中import '@...'是什么
今天看新项目代码,有import '@/assets/css/theme/index.css'一类的代码,里面的@是做什么的呢. 找到这篇文章https://www.cnblogs.com/bos ...
- 【24.63%】【codefroces 686D】Kay and Snowflake
time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standa ...
- python 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 样例 给出 1->3->8->11->15->null,2-& ...
- python 反转列表
翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 步骤是这样的: ...