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 ...
随机推荐
- 【42%】【hdu1166】排兵布阵(树状数组解法&&线段树解法)
Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...
- Visual Studio Debugger
Visual Studio Debugger中七个鲜为人知的小功能 Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题.这里给大家简单介绍一下V ...
- 前端调用百度API
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- oracle 全部查询和表空间,以及其关系
select * from dba_users; 查看数据库里面全部用户,前提是你是有dba权限的帐号.如sys,system select * from all_users; 查看你能管 ...
- 【noip模拟】Fancy Signal Translate (暴力 + 哈希)
题目描述 FST是一名可怜的 OIer,他很强,但是经常 fst,所以 rating 一直低迷. 但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有OIer才能破解. 这种加密方式 ...
- Springmvc案例1----基于spring2.5的採用xml配置
首先是项目和所须要的包截图: 改动xml文件: <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- CSS动作
5.过渡 tansition (由一个状态过渡到另外一个状态的过程) transition 过渡 参数1: ...
- 在MVC项目中分页使用MvcPager插件
参考网站 http://www.webdiyer.com/mvcpager/demos/ 这个插件非常简单易用,如果想快速使用 可以参考我这篇文章,其实参考网站也是非常简单的 首先选择你的web项目 ...
- thread、Task、async & await
学习 Jesse 的文章 async & await 的前世今生(Updated) 而来 Thread是最开始使用的多线程.new一个Thread对象,将方法传进去.手动Start() 还可以 ...
- python 教程 第十四章、 地址薄作业
第十四章. 地址薄作业 #A Byte of Python #!/usr/bin/env python import cPickle import os #define the contacts fi ...