Windows下的窗口程序
再进一步、
- .
- .model flat,stdcall
- option casemap:none
- include Windows.inc
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- WinMain proto :DWORD ,:DWORD,:DWORD,:DWORD ;WinMain 函数原型定义
- .DATA
- ClassName db "SimpleWinClass",
- AppName db "My First Window",
- .DATA? ;没有初始化的数据
- hInstance HINSTANCE ?
- CommandLine LPSTR ? ;字符串指针变量
- .CODE
- start:
- ;-----------------------------------------------------------------------------------------------------------
- ;得到应用程序的句柄
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- ;-----------------------------------------------------------------------------------------------------------
- ;得到命令行参数
- invoke GetCommandLine
- mov CommandLine,eax
- ;调用WinMain函数
- invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
- ;-----------------------------------------------------------------------------------------------------------
- ;退出该应用程序
- invoke ExitProcess,eax
- ;-----------------------------------------------------------------------------------------------------------
- WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
- LOCAL wc:WNDCLASSEX
- LOCAL msg:MSG
- LOCAL hwnd:HWND
- ;-----------------------------------------------------------------------------------------------------------
- ;注册窗口类
- mov wc.cbSize,SIZEOF WNDCLASSEX
- mov wc.style,CS_HREDRAW or CS_VREDRAW
- mov wc.lpfnWndProc,OFFSET WndProc ;指定窗口的回调函数
- mov wc.cbClsExtra,NULL
- mov wc.cbWndExtra,NULL
- push hInstance
- pop wc.hInstance ;保存窗口的实例句柄
- mov wc.hbrBackground,COLOR_WINDOW+ ;窗口的背景颜色
- mov wc.lpszMenuName,NULL
- mov wc.lpszClassName,OFFSET ClassName
- invoke LoadIcon,NULL,IDI_APPLICATION
- mov wc.hIcon,eax
- mov wc.hIconSm,eax
- invoke LoadCursor,NULL,IDC_ARROW
- mov wc.hCursor,eax
- invoke RegisterClassEx,addr wc
- ;-----------------------------------------------------------------------------------------------------------
- ;创建窗口对象
- invoke CreateWindowEx,NULL,\
- ADDR ClassName,\
- ADDR AppName,\
- WS_OVERLAPPEDWINDOW,\
- CW_USEDEFAULT,\
- CW_USEDEFAULT,\
- CW_USEDEFAULT,\
- CW_USEDEFAULT,\
- NULL,\
- NULL,\
- hInst,\
- NULL
- mov hwnd,eax
- ;-----------------------------------------------------------------------------------------------------------
- ;显示窗口
- invoke ShowWindow,hwnd,CmdShow
- ;-----------------------------------------------------------------------------------------------------------
- ;刷新窗口客户区
- invoke UpdateWindow,hwnd
- ;-----------------------------------------------------------------------------------------------------------
- ;进入获取窗口消息的循环
- .WHILE TRUE
- invoke GetMessage,ADDR msg,NULL,,
- .BREAK .IF (!eax)
- invoke TranslateMessage,ADDR msg
- invoke DispatchMessage,ADDR msg
- .endw
- mov eax,msg.wParam
- ret
- WinMain endp
- ;-----------------------------------------------------------------------------------------------------------
- ;窗口回调函数
- WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
- ;关闭消息--退出处理
- .IF uMsg==WM_DESTROY
- invoke PostQuitMessage,NULL
- .ELSE
- invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- ret
- .endif
- xor eax,eax
- ret
- WndProc endp
- end start
Windows下的窗口程序的更多相关文章
- Windows下,通过程序设置全屏抗锯齿(多重采样)的方法
这里说的全屏抗锯齿,不是基于着色器的FXAA之类的方式,而是兼容性更好的,基于固定管线的多重采样方式. 先来说一下开发环境,我用的是VC2013+GLEW1.11. 要通过程序设置多重采样,首先需要进 ...
- 使用Code::blocks在windows下写网络程序
使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创 ...
- [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群
0. 说明 Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建 ...
- gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)
cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...
- # 如何在Windows下运行Linux程序
如何在Windows下运行Linux程序 一.搭建 Linux 环境 1.1 安装 VMware Workstation https://www.aliyundrive.com/s/TvuMyFdTs ...
- 一个简单的Windows下的socket程序
服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...
- Windows下实现应用程序看门狗软件
有时候,我们需要确保一个应用程序长期稳定地运行,但是在Windows平台上由于种种原因,几乎不可能保障一个应用的绝对可靠运行.那么,我们就需要有一个机制,在应用死机﹑异常﹑系统重启等情况下自我恢复,而 ...
- Golang在windows下交叉编译linux程序
1.下载相关程序. Golang下载:http://www.golangtc.com/download Git下载:http://git-scm.com/download/ TDM-GCC下载:htt ...
- windows下flink示例程序的执行
1.什么是flink Apache Flink® - Stateful Computations over Data Streams 2.启动 下载地址 我下载了1.7.2 版本 解压到本地文件目 ...
随机推荐
- C# ?? 操作符示例
static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static ...
- Android应用自动更新功能的实现!!!
自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语:最新版本的url等).然后我们给出提示框,用 ...
- 解决获取IP地址时出现“在一个非套…
今天单位的一台机器在用IPCONFIG/RENEW时遇到了这个问题,上网查了一下,网上的版本在对XP不太好用,网上的版本如下: 1.从注册表中备份以下项:(当然也可以用Erunt备份整个注册表)HKE ...
- 【转】GATT Profile 简介
网上关于讲解 BLE 的内容比较少,看到这篇文章写的非常详细 Introduction to Bluetooth Low Energy,作为 BLE 的入门时介绍是非常合适的.本文主要翻译了一下这篇文 ...
- C# 中的常用正则表达式大全
这是从网上找来的,收藏一下备用,用到之处可以节省不少时间哦! 只能输入数字: "^[0-9]*$" . 只能输入n位的数字:"^\d{n}$". 只能输入 ...
- Activity之间的跳转
/* * 触发按钮bt1跳转到另一个Activity */ bt1.setOnClickListener(new OnClickListener() { @Override public void o ...
- 解决rsync 同步auth failed on module问题
今天在同步备份文件时遇到一个情况,以前正常的备份,在昨天突然同步备份文件失败了.于是开始检查原因..... 报错日志/var/log/rsyncd.log发现错误 // :: [] auth fail ...
- sublime远程连接到linux主机
sublime远程连接到linux主机 sublime远程连接到linux主机 微信开发,直接使用sublime的sftp功能修改wx_sample.php 1.为sublime安装安装包管理插件Pa ...
- 学习笔记 css3--选择器&新增颜色模式&文本相关
Css3 选择器 --属性选择器 E[attr]只使用属性名,但没有确定任何属性值,E[attr="value"]指定属性名,并指定了该属性的属性值E[attr~="va ...
- css3圆角讲解
Css3圆角讲解:想必大家对于图片,背景圆角,都不陌生吧, 圆角语法:border-radius:圆角值: 这个值可以使用:em ,ex,pt,px,百分比; Border-radius跟margin ...