再进一步、

  1. .
  2. .model flat,stdcall
  3. option casemap:none
  4. include Windows.inc
  5. include user32.inc
  6. includelib user32.lib
  7. include kernel32.inc
  8. includelib kernel32.lib
  9.  
  10. WinMain proto :DWORD ,:DWORD,:DWORD,:DWORD ;WinMain 函数原型定义
  11.  
  12. .DATA
  13. ClassName db "SimpleWinClass",
  14. AppName db "My First Window",
  15.  
  16. .DATA? ;没有初始化的数据
  17. hInstance HINSTANCE ?
  18. CommandLine LPSTR ? ;字符串指针变量
  19.  
  20. .CODE
  21. start:
  22. ;-----------------------------------------------------------------------------------------------------------
  23. ;得到应用程序的句柄
  24. invoke GetModuleHandle,NULL
  25. mov hInstance,eax
  26.  
  27. ;-----------------------------------------------------------------------------------------------------------
  28. ;得到命令行参数
  29. invoke GetCommandLine
  30. mov CommandLine,eax
  31.  
  32. ;调用WinMain函数
  33. invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
  34. ;-----------------------------------------------------------------------------------------------------------
  35. ;退出该应用程序
  36.  
  37. invoke ExitProcess,eax
  38.  
  39. ;-----------------------------------------------------------------------------------------------------------
  40. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
  41. LOCAL wc:WNDCLASSEX
  42. LOCAL msg:MSG
  43. LOCAL hwnd:HWND
  44. ;-----------------------------------------------------------------------------------------------------------
  45. ;注册窗口类
  46. mov wc.cbSize,SIZEOF WNDCLASSEX
  47. mov wc.style,CS_HREDRAW or CS_VREDRAW
  48. mov wc.lpfnWndProc,OFFSET WndProc ;指定窗口的回调函数
  49. mov wc.cbClsExtra,NULL
  50. mov wc.cbWndExtra,NULL
  51. push hInstance
  52. pop wc.hInstance ;保存窗口的实例句柄
  53. mov wc.hbrBackground,COLOR_WINDOW+ ;窗口的背景颜色
  54. mov wc.lpszMenuName,NULL
  55. mov wc.lpszClassName,OFFSET ClassName
  56. invoke LoadIcon,NULL,IDI_APPLICATION
  57. mov wc.hIcon,eax
  58. mov wc.hIconSm,eax
  59. invoke LoadCursor,NULL,IDC_ARROW
  60. mov wc.hCursor,eax
  61. invoke RegisterClassEx,addr wc
  62.  
  63. ;-----------------------------------------------------------------------------------------------------------
  64. ;创建窗口对象
  65.  
  66. invoke CreateWindowEx,NULL,\
  67. ADDR ClassName,\
  68. ADDR AppName,\
  69. WS_OVERLAPPEDWINDOW,\
  70. CW_USEDEFAULT,\
  71. CW_USEDEFAULT,\
  72. CW_USEDEFAULT,\
  73. CW_USEDEFAULT,\
  74. NULL,\
  75. NULL,\
  76. hInst,\
  77. NULL
  78. mov hwnd,eax
  79. ;-----------------------------------------------------------------------------------------------------------
  80. ;显示窗口
  81. invoke ShowWindow,hwnd,CmdShow
  82.  
  83. ;-----------------------------------------------------------------------------------------------------------
  84. ;刷新窗口客户区
  85. invoke UpdateWindow,hwnd
  86. ;-----------------------------------------------------------------------------------------------------------
  87. ;进入获取窗口消息的循环
  88. .WHILE TRUE
  89. invoke GetMessage,ADDR msg,NULL,,
  90. .BREAK .IF (!eax)
  91. invoke TranslateMessage,ADDR msg
  92. invoke DispatchMessage,ADDR msg
  93. .endw
  94. mov eax,msg.wParam
  95. ret
  96. WinMain endp
  97.  
  98. ;-----------------------------------------------------------------------------------------------------------
  99. ;窗口回调函数
  100. WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  101. ;关闭消息--退出处理
  102. .IF uMsg==WM_DESTROY
  103. invoke PostQuitMessage,NULL
  104. .ELSE
  105. invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  106. ret
  107. .endif
  108. xor eax,eax
  109. ret
  110. WndProc endp
  111.  
  112. end start

Windows下的窗口程序的更多相关文章

  1. Windows下,通过程序设置全屏抗锯齿(多重采样)的方法

    这里说的全屏抗锯齿,不是基于着色器的FXAA之类的方式,而是兼容性更好的,基于固定管线的多重采样方式. 先来说一下开发环境,我用的是VC2013+GLEW1.11. 要通过程序设置多重采样,首先需要进 ...

  2. 使用Code::blocks在windows下写网络程序

    使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创 ...

  3. [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群

    0. 说明  Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建  ...

  4. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  5. # 如何在Windows下运行Linux程序

    如何在Windows下运行Linux程序 一.搭建 Linux 环境 1.1 安装 VMware Workstation https://www.aliyundrive.com/s/TvuMyFdTs ...

  6. 一个简单的Windows下的socket程序

    服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...

  7. Windows下实现应用程序看门狗软件

    有时候,我们需要确保一个应用程序长期稳定地运行,但是在Windows平台上由于种种原因,几乎不可能保障一个应用的绝对可靠运行.那么,我们就需要有一个机制,在应用死机﹑异常﹑系统重启等情况下自我恢复,而 ...

  8. Golang在windows下交叉编译linux程序

    1.下载相关程序. Golang下载:http://www.golangtc.com/download Git下载:http://git-scm.com/download/ TDM-GCC下载:htt ...

  9. windows下flink示例程序的执行

    1.什么是flink Apache Flink® - Stateful Computations over Data Streams 2.启动 下载地址  我下载了1.7.2 版本  解压到本地文件目 ...

随机推荐

  1. C# ?? 操作符示例

    static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static ...

  2. Android应用自动更新功能的实现!!!

    自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语:最新版本的url等).然后我们给出提示框,用 ...

  3. 解决获取IP地址时出现“在一个非套…

    今天单位的一台机器在用IPCONFIG/RENEW时遇到了这个问题,上网查了一下,网上的版本在对XP不太好用,网上的版本如下: 1.从注册表中备份以下项:(当然也可以用Erunt备份整个注册表)HKE ...

  4. 【转】GATT Profile 简介

    网上关于讲解 BLE 的内容比较少,看到这篇文章写的非常详细 Introduction to Bluetooth Low Energy,作为 BLE 的入门时介绍是非常合适的.本文主要翻译了一下这篇文 ...

  5. C# 中的常用正则表达式大全

       这是从网上找来的,收藏一下备用,用到之处可以节省不少时间哦! 只能输入数字: "^[0-9]*$" . 只能输入n位的数字:"^\d{n}$". 只能输入 ...

  6. Activity之间的跳转

    /* * 触发按钮bt1跳转到另一个Activity */ bt1.setOnClickListener(new OnClickListener() { @Override public void o ...

  7. 解决rsync 同步auth failed on module问题

    今天在同步备份文件时遇到一个情况,以前正常的备份,在昨天突然同步备份文件失败了.于是开始检查原因..... 报错日志/var/log/rsyncd.log发现错误 // :: [] auth fail ...

  8. sublime远程连接到linux主机

    sublime远程连接到linux主机 sublime远程连接到linux主机 微信开发,直接使用sublime的sftp功能修改wx_sample.php 1.为sublime安装安装包管理插件Pa ...

  9. 学习笔记 css3--选择器&新增颜色模式&文本相关

    Css3 选择器 --属性选择器 E[attr]只使用属性名,但没有确定任何属性值,E[attr="value"]指定属性名,并指定了该属性的属性值E[attr~="va ...

  10. css3圆角讲解

    Css3圆角讲解:想必大家对于图片,背景圆角,都不陌生吧, 圆角语法:border-radius:圆角值: 这个值可以使用:em ,ex,pt,px,百分比; Border-radius跟margin ...