基本上的窗口都会有一个菜单,现在就来看看Win32汇编中是如何加载菜单的:

1>在工程中添加新的菜单资源

2>双击新添加的菜单资源进行编辑

3>菜单栏:Make->Compile RC来编译资源文件

4>导出资源中的ID号并写到数据段的.const中

5>下面是完整的源代码供参考:(工程下载地址)

.386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc include user32.inc include debug.inc includelib kernel32.lib includelib user32.lib includelib debug.lib .data? hInstance dd ? hWinMain dd ? hMenu dd ? .const szClassName db 'MyClass',0 szCaption db 'My Window',0 ;---------------------------------------- IDR_MENU equ 10000 IDM_FILE equ 10001 IDM_OPEN equ 10003 IDM_EXIT equ 10002 IDM_EDIT equ 10004 IDM_COPY equ 10005 .code _WinMain proc LOCAL @stWndClass:WNDCLASSEX LOCAL @stMsg:MSG ;-------------------------- invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass ;-------------------------- invoke GetModuleHandle,NULL mov hInstance,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 LoadCursor,0,IDC_ARROW mov @stWndClass.hCursor,eax ;-------------[Regist Window]------------- invoke RegisterClassEx,addr @stWndClass ;------------[Load Menu]------------------ invoke LoadMenu,hInstance,IDR_MENU mov hMenu,eax ;-------------[Create Window]------------- invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,\ offset szCaption,WS_OVERLAPPEDWINDOW,100,100,600,400,\ NULL,hMenu,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 ;==================================================== _ProcWinMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam mov eax,uMsg .if eax==WM_CREATE .elseif eax==WM_CLOSE invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDM_EXIT invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL .endif .elseif invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif xor eax,eax ret _ProcWinMain endp ;==================================================== start: call _WinMain invoke ExitProcess,NULL end start

转载于:https://www.cnblogs.com/wbbice/archive/2012/09/03/2668400.html

Win32汇编--加载菜单资源相关推荐

  1. win32汇编--加载位图(bmp)资源

    本例通过静态(static)控件的SS_BITMAP属性来加载位图: 核心代码如下:(完整工程下载) 转载于:https://www.cnblogs.com/wbbice/archive/2012/0 ...

  2. win32汇编程序设计中菜单资源的定义

    1.菜单的基本概念 如下图所示,在窗口中,菜单位于标题栏下边.这个菜单称为"主菜单"或者"顶层菜单",图中菜单的菜单项有"文件"." ...

  3. win7下计划任务schtasks使用详解及错误:无法加载列资源的解决方法1

    win7下计划任务schtasks使用详解及"错误:无法加载列资源"的解决方法1 2011-12-10 20:33 schtasks 命令简述: 安排命令和程序,使其定期运行或在指 ...

  4. 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。

    成功解决(Win32): 已加载"C:\Windows\SysWOW64\ntdll.dll".无法查找或打开 PDB 文件. 目录 解决问题 解决方法 解决问题 解决方法 工具栏 ...

  5. 使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题

    使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题 当你的SPA(单页应用程序)变得复杂时,打包构建后的Javascript包会变得非常大,以至于严重影响页面的加载时间.vue-r ...

  6. 不加载执行js_前端性能优化:preload 预加载页面资源

    网上看到一篇来自蚂蚁金服数据体验团队的文章,觉得不错,分享给大伙:https://juejin.im/post/5a7fb09bf265da4e8e785c38 本文主要介绍preload的使用,以及 ...

  7. https连接加载http资源

    当https 连接中包含加载http资源时,浏览器会停止加载,UC浏览器console 会打印如下信息: Mixed Content: The page at 'https://Xie.cn/' wa ...

  8. WIn10 Odoo10.0 解决开发环境登录后无法加载菜单,js报错

    2019独角兽企业重金招聘Python工程师标准>>> win10的开发环境,2个礼拜前发现odoo10.0 登陆后无法加载菜单和内容,打开chrome控制台发现报以下错误. Ref ...

  9. SpringBoot加载静态资源

    在SpringBoot中加载静态资源和在普通的web应用中不太一样.默认情况下,Spring Boot从classpath下一个叫/static(/public,/resources或/META-IN ...

最新文章

  1. msp430入门学习16
  2. 520这天,我突然意识到,她根本配不上我这么聪明的男人
  3. 打算写一个ASM集成开发环境
  4. 图片指定区域根据rgb值计算出对应的坐标地址_【水文】震惊!高考期间,这位学生居然能通过图片隐写实现文字通信!...
  5. 【Python】双十一,就用turtle画个单身狗送给自己
  6. Iptables Layer7禁止QQ、MSN、p2p软件(解决iptable 无法启动)
  7. Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息
  8. 笔记:windows 2012 安装SQL 2008 群集报错
  9. easyui日期控件datebox的onchange事件
  10. SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理...
  11. linux自动分区shell,SHELL脚本实现分区
  12. php 时间戳 24小时制,如何在php中添加24小时的unix时间戳?(How do I add 24 hours to a unix timestamp in php?)...
  13. 易宝支付 -- 微信小程序对接
  14. Android GPS开发总结
  15. 仓储管理毕业论文【含matlab优化算法】
  16. java 坐标转换_java – 将图像X,Y坐标转换为经度和纬度?
  17. 三消游戏死局算法的解析
  18. RT-Thread Env工具下 scons命令构建工程 SConscript和Kconfig修改示例
  19. linux怎么扫描磁盘,Linux中磁盘扫描流程是怎么样的?
  20. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

热门文章

  1. node --- 监听路由,读取json文件,向MongoDB中写入数据
  2. 操作系统 --- 进程和管程的不同
  3. vue --- 使用字符串'api'跨域请求资源
  4. ServiceNow 中关于UI Action 在portal端的使用
  5. 分针网——怎么轻松学习JavaScript
  6. Java 中参数传递是传值还是引用?
  7. mysql升级5.5
  8. 证监会:《证券期货业信息安全保障管理办法(征求意见稿) 》公开征求意见...
  9. Blog-LOGO原型
  10. 设计模式是用来弥补面向对象编程缺陷的方法总结