程序运行如下;当按下一个按键,在窗口上显示该字符;

程序;masm32;Build All;

当消息为wm_char,即 uMsg==WM_CHAR;

所按下的键在wParam中,将此值转到char中;然后调用InvalidateRect,调用此函数后,窗口无效,将执行消息处理的WM_PAINT分支;

处理WM_PAINT消息时,调用TextOut,在窗口上输出了char的内容;

看代码,

char WPARAM 20h

char 标号定义在常量区,类型是WPARAM;

假设现在我想在按下 o 键时,在窗口上输出 9 ;修改代码如下图;

构建,如下图;错误,提示 标号重定义:char;

看来还得使用push pop对,改为如下;

好了,当按下 o ,输出 9;其他键不变;

.386
.model flat,stdcall
option casemap:noneWinMain proto :DWORD,:DWORD,:DWORD,:DWORDinclude S:\masm32\include\windows.inc
include S:\masm32\include\user32.inc
include S:\masm32\include\kernel32.inc
include S:\masm32\include\gdi32.inc
includelib S:\masm32\lib\user32.lib
includelib S:\masm32\lib\kernel32.lib
includelib S:\masm32\lib\gdi32.lib.data
ClassName db "SimpleWinClass",0
AppName   db "wm_char Demo Window",0
char WPARAM 20h.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?.code
start:
invoke GetModuleHandle,NULL
mov    hInstance,eax
invoke GetCommandLine
mov    CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style,CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc,OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstpop wc.hInstancemov wc.hbrBackground,COLOR_WINDOW+1mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx,ADDR wcinvoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,100,100,\100,100,NULL,NULL,hInst,NULLmov hwnd,eaxinvoke ShowWindow,hwnd,SW_SHOWNORMALinvoke UpdateWindow,hwnd.while TRUEinvoke GetMessage,ADDR msg,NULL,0,0.break .if (!eax)invoke TranslateMessage,ADDR msginvoke DispatchMessage,ADDR msg.endwmov eax,msg.wParamretWinMain endp WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAMLOCAL hdc:HDCLOCAL ps:PAINTSTRUCT.if uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.elseif uMsg==WM_CHARpush wParampop  char.if char=='o'push '9'pop char.endifinvoke InvalidateRect,hWnd,NULL,TRUE.elseif uMsg==WM_PAINTinvoke BeginPaint,hWnd,ADDR psmov    hdc,eaxinvoke TextOut,hdc,0,0,ADDR char,1invoke EndPaint,hWnd,ADDR ps.elseinvoke DefWindowProc,hWnd,uMsg,wParam,lParamret.endifxor eax,eaxretWndProc endp
end start

win32汇编处理字符消息和给常量区标号赋值相关推荐

  1. Win32汇编笔记-消息基础

    WIN32的消息机制 windows系统是一个消息驱动的OS,操作通过处理各种消息来响应用户的操作. 对于每一个带有窗口的线程,系统都会给他分配一个自己的消息队列,用于处理消息派送(Dispatch) ...

  2. Win32 键盘事件 - 击键消息、字符消息、插入符号(光标)

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 以下内容主 ...

  3. win32 汇编基础概念整理

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

  4. win32汇编基础概念

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

  5. 【Win32汇编】学习Win32汇编

    学习Win32汇编(Windows下的32位汇编) 第一个程序Hello world 控制台输出(新建Console App工程) Debug输出(新建Win32 App工程) 后面代码的头文件在这里 ...

  6. Win32汇编学习——windows汇编语法(小甲鱼教程)

    Win32汇编学习--windows汇编语法(小甲鱼教程) 1)指令集 .386 语句是汇编语句的伪指令,类似指令有:.8086 . .186  ..286  ..386/.386p  . .486/ ...

  7. win32汇编·指令

    win32汇编·指令 常用伪指令 数字常量 字符串常量 预留空间 复制重复 符号定义伪指令 等号伪指令 操作符伪指令 算术运算符 逻辑操作符 关系操作符 框架定义 样例 函数声明语句 include ...

  8. C指针原理(23)-win32汇编及.NET调试

    2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...

  9. win32汇编 MASM03

    http://blog.fishc.com/738.html#codesyntax_5 让编程改变世界 Change the world by program 代码段 .code段是代码段,所有的指令 ...

最新文章

  1. JavaScript跨域总结与解决办法
  2. Java加载词向量_W2C得到词向量之后,如何得到句子向量,
  3. Java黑皮书课后题第10章:**10.27(实现StringBuffer类)在Java库中提供了StringBuffer类,给胡你自己对下面方法的实现(将新类命名为MyStringBuilder1)
  4. [html]history禁用浏览器的后退功能(包括其他操作后退的按钮,操作等)
  5. PAT_B_1080_C++(25分)
  6. 工作144:时间戳格式化
  7. JS获取当前时间戳的方法
  8. 我的世界中国版服务器没有mods文件夹,我的世界中国版如何安装mod 国服安装mod的详细教程...
  9. linux系统mysql创建表,Linux系统下手动新建数据库
  10. 哪款浏览器好用_超级实用!让你效率倍增的6款浏览器插件
  11. 使用python实现嵌套压缩包解压
  12. 仅需6步!虹科教你如何在第三方软件CODESYS中配置PCAN
  13. qq传输文件为什么服务器忙,win10系统qq接收文件慢一直显示传输连接中的教程
  14. 攻城狮还是产品运营?
  15. 解决C#界面假死问题
  16. 一点小感受:界面和程序的分离
  17. 【论文笔记】D2A U-Net: Automatic segmentation of COVID-19 CT slices based on dual attention and hybrid di
  18. oracle添加删除磁盘,oracle11gR2 ASM添加和删除磁盘
  19. 我是如何从汇编语言脑残粉转变的
  20. 深圳国际智能家居展览会

热门文章

  1. Ubuntu 9.10下Nvidia官方最新190.42显卡驱动安装
  2. 报错信息为:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource
  3. 自定义动画 animate || 案例:王者荣耀手风琴效果分析
  4. 文件上传——选择文件之后自动上传||文件上传的后端代码
  5. 关于chorme浏览器无法保存第三方cookie的问题
  6. Elasticsearch 2.0以上版本根据条件批量删除Java如何实现
  7. leetCode C++ 二分查找 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
  8. CTFshow 文件上传 web154
  9. HTTP/1问题和HTTP/2解决思路
  10. php 发布时间设计,php – 发布和评论的数据库设计