1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4. ;include 定义
  5. include   windows.inc
  6. include   gdi32.inc
  7. includelib    gdi32.lib
  8. include    user32.inc
  9. includelib    user32.lib
  10. include    kernel32.inc
  11. includelib    kernel32.lib
  12. ;数据段
  13. .data? ;变量声明
  14. hInstance    dd  ?
  15. hWinMain     dd  ?
  16. .const;常量声明
  17. szClassName    db 'MyClass',0
  18. szCptionMain  db 'myfirstwindow!',0
  19. szText      db 'win32 assembly,simpler and powerful',0
  20. ;代码段
  21. .code
  22. ;函数过程
  23. _ProcWinMain  proc uses ebx edi esi ,hWnd,uMsg,wParam,lParam
  24. local @stPs:PAINTSTRUCT
  25. local @stRect:RECT
  26. local @hDc
  27. mov eax,uMsg
  28. .if     eax  ==  WM_PAINT
  29. invoke BeginPaint,hWnd,addr @stPs
  30. mov @hDc,eax
  31. invoke GetClientRect,hWnd,addr @stRect
  32. invoke DrawText,@hDc,addr szText,-1,\
  33. addr @stRect,\
  34. DT_SINGLELINE or DT_CENTER or DT_VCENTER
  35. invoke EndPaint,hWnd,addr @stPs
  36. .elseif     eax  ==  WM_CLOSE
  37. invoke DestroyWindow,hWinMain
  38. invoke PostQuitMessage,NULL
  39. .else
  40. invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  41. ret
  42. .endif
  43. xor      eax,eax
  44. ret
  45. ;_ProcWinMain函数结束
  46. _ProcWinMain endp
  47. ; _WinMain子函数
  48. _WinMain   proc
  49. local    @stWndClass:WNDCLASSEX
  50. local    @stMsg:MSG
  51. invoke GetModuleHandle,NULL
  52. mov hInstance,eax
  53. invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
  54. ;注册窗口类
  55. invoke   LoadCursor,0,IDC_ARROW
  56. mov     @stWndClass.hCursor,eax
  57. push    hInstance
  58. pop    @stWndClass.hInstance
  59. mov    @stWndClass.cbSize,sizeof WNDCLASSEX
  60. mov    @stWndClass.style,CS_HREDRAW or CS_VREDRAW
  61. mov    @stWndClass.lpfnWndProc,offset _ProcWinMain
  62. mov    @stWndClass.hbrBackground,COLOR_WINDOW+1
  63. mov    @stWndClass.lpszClassName,offset szClassName
  64. invoke   RegisterClassEx,addr @stWndClass
  65. ;建立并显示窗口
  66. invoke   CreateWindowEx,WS_EX_CLIENTEDGE,\
  67. offset szClassName, offset szCptionMain,\
  68. WS_OVERLAPPEDWINDOW,\
  69. 100,100,600,400,\
  70. NULL,NULL,hInstance,NULL
  71. mov    hWinMain,eax
  72. invoke   ShowWindow,hWinMain,SW_SHOWNORMAL
  73. invoke  UpdateWindow,hWinMain
  74. ;消息循环
  75. .while   TRUE
  76. invoke  GetMessage,addr @stMsg,NULL,0,0
  77. .break  .if  eax==0
  78. invoke  TranslateMessage,addr @stMsg
  79. invoke   DispatchMessage,addr @stMsg
  80. .endw
  81. ret
  82. ;函数结束
  83. _WinMain  endp
  84. ;程序入口
  85. start:
  86. call _WinMain
  87. invoke ExitProcess,NULL
  88. end start
 

http://blog.csdn.net/earbao/article/details/11931007

MASMPlus汇编之简单窗体的更多相关文章

  1. 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    秦鼎涛  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...

  2. 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  3. C#简单窗体应用程序(三)

    使用C#创建窗体应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:设计歌曲列表界面,效果如下: 第一步:创建项目: ...

  4. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战需求分析1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain—创建窗体 ​ BallJPanel—画小 ...

  5. 20135239益西拉姆 Linux内核分析 汇编一个简单的c程序并分析其指令过程

    益西拉姆+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一周linux内核分析 学习笔记 一.计算机 ...

  6. 转:简单窗体振动-WaitForSingleObject,消息,winapi

    http://www.cnblogs.com/Jekhn/archive/2012/08/25/2656656.html 线程,消息函数,SetWindowPos设置窗体位置 if WaitForSi ...

  7. C#简单窗体应用程序(二)

    使用C#创建控制台应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:设计登录界面,效果如下: 第一步:创建项目: 文 ...

  8. C#简单窗体应用程序(一)

    使用C#创建控制台应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:创建一个Windows窗体应用程序,在窗体中添加 ...

  9. GUI——AWT框架和容器,创建简单窗体

    GUI概述:GUI(Graphical User Interface)—图形化用户界面.用户和程序之间可以通过GUI能方便友好地进行交互,在Java语言中,JFC(Java Foundation Cl ...

随机推荐

  1. Qt 打开安卓相冊选择图片并获取图片的本地路径

    Qt 打开安卓相冊选择图片并获取图片的本地路径 过程例如以下: 通过 Intent 打开安卓的系统相冊. 推荐使用 QAndroidJniObject::getStaticObjectField 获取 ...

  2. phpStorm怎么解决502 bad gateway(总结整理)

    phpStorm怎么解决502 bad gateway(总结整理) 一.总结 1.配置 php解释器. 二.phpStorm解释器与服务器配置(解决502 bad gateway与404 not fo ...

  3. 强大的 function adapters

    void printElem(int elem, const char* prefix){ cout << prefix << elem << endl; } fo ...

  4. erlang tcp发包速度测试

    http://blog.sina.com.cn/s/blog_96b8a1540101317m.html 这段时间我们的项目遇到广播包的一些性能问题,想起之前看到yufeng老大提到的1s广播40K包 ...

  5. selenium firefox 提取qq空间相册链接

    环境: selenium-java 3.9.1 firefox 57.0 geckodriver 0.19.1 1.大概的思路就是模拟用户点击行为,关于滚动条的问题,我是模拟下拉箭头,否则只能每个相册 ...

  6. 十分钟了解 spring cloud

    1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB.KV,去掉重量级ESB),并且强调DevOps和快 ...

  7. jsonkit 分解nsarray 时刻 一个错误

    jsonkit 分解nsarray 时刻 一个错误 Assertion failure in -[TXJKArray count], /Users/mqq/hudson/1740/src/Tencen ...

  8. 转载:Adb远程连接Android系统(通过网络使用ADB(Connect to android with wifi))

    本文介绍如何通过网络(尤指无线网络)与Android的adbd进行连接.原理:adb server: 计算机上的一个服务进程,进程名为adbadb daemon: Android 手机上的一个服务进程 ...

  9. Android中使用sqlite3操作SQLite

    SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.创建数据库:  1.将sqlit ...

  10. Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来

    首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机. 如果你是网购达人,你的手机上一定少不了淘宝客户 ...