当前位置: 首页 > news >正文

win32汇编环境,对话框程序中通过资源显示bmp图像

;运行效果

;win32汇编环境,对话框程序中通过资源显示bmp图像
;通过资源的方式,会把图像固定在exe文件里,会变大。通过读取文件的方式,没有固定在exe文件里,也可以随时换图像文件,所以exe文件较小
;直接抄进RadAsm可编译运行。重要的部分标注解释。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc 
include    user32.inc 
include    kernel32.inc 
includelib user32.lib 
includelib kernel32.lib 

; 自定义函数声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD   ;对话框窗口函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data 
DlgName    db "MyDialog",0 

.data? 
hInstance HINSTANCE             ? 
hBmp               dd    ?    ;第4步,定义取得的图像的句柄变量,句柄象征着这个图像
.const 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ 1000    ;图标
IDB01        equ 11          ;第3步,等值定义,就是告诉编译软件RadAsm,看到IDB01时把它换成值11
IDC_BMP        equ 21          ;第8步,意思同上
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code 
start: 
    invoke GetModuleHandle, NULL 
    mov    hInstance,eax 
    invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL 
    invoke ExitProcess,eax 

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 

    .if uMsg == WM_INITDIALOG 
                invoke    LoadIcon,hInstance,ICO_MAIN    ;加载图标
               invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
    
            invoke    LoadBitmap,hInstance,IDB01      ;第5步,装载图像
            mov    hBmp,eax                ;返回值eax里就是图像的句柄,赋给hBmp
    .elseif uMsg == WM_PAINT
                invoke    SendDlgItemMessage,hWnd,IDC_BMP,STM_SETIMAGE,IMAGE_BITMAP,hBmp   ;第9步,发送消息给窗口让它显示出图像
                invoke    ShowWindow,IDC_BMP,SW_SHOW
    .elseif uMsg == WM_CLOSE 
        invoke EndDialog, hWnd,NULL 
    .else 
        mov eax,FALSE 
        ret 
    .endif 
    mov eax,TRUE 
    ret 
DlgProc endp 

end start 
 

;下面为rc文件内容
#include "resource.h"                      //提示缺少该文件,可以在资源里下载
#define    ICO_MAIN        1000       //图标
#define    IDB01                11           //第2步,让IDB01有实际值,为11,可以随便设,只要不在同类引用时相重复就可以了
#define IDC_BMP            21           //第7步,定义装图像的控件ID有实际值,随便设  
ICO_MAIN    ICON        "Main.ico"
IDB01        BITMAP        "a.bmp"     //第1步,定义bmp文件的ID,bmp文件最好用PS或ACD软件转换一下,就是用PS打开后,再另存为bmp图像,尤其是网上下载的或其它格式经网上转换的。
//
//定义对话框
MyDialog DIALOG 10, 10, 160, 235 
STYLE  DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | 
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK 
CAPTION "通过资源显示bmp图像" 
BEGIN 
CONTROL IDB01, IDC_BMP, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 5, 5, 40, 95     //第6步,在对话框资源里面定义一个能装图像的控件
END 


 

http://www.lryc.cn/news/514981.html

相关文章:

  • 《探索人工智能的多元学派:符号主义、连接主义与行为主义》
  • 2024年终总结及计划
  • 数据挖掘——关联规则挖掘
  • JVM实战—9.线上FGC的几种案例
  • STM32-BKP备份寄存器RTC实时时钟
  • HTML-文本标签
  • 香橙派5plus单独编译并安装linux内核无法启动的原因分析与解决记录
  • 嵌入式应用软件开发中C语言方向面试题
  • linux 系统配置ip
  • 低代码开发:开启企业数智化转型“快捷键”
  • Tailwind CSS 实战:性能优化最佳实践
  • [redux] useDispatch的两种用法
  • Postgresql 命令还原数据库
  • 电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法
  • Elasticsearch与数据库数据一致性:最佳实践与解决方案
  • vue导入导出excel、设置单元格文字颜色、背景色、合并单元格(使用xlsx-js-style库)
  • 电子电气架构 --- 中央处理器HPC及软件架构
  • 代码实战:基于InvSR对视频进行超分辨率重建
  • 一文读懂主成分分析法(PCA)
  • Redis(基础篇 + 实践篇 )
  • 高质量C++小白教程:2.10-预处理器简介
  • 一、二极管(模电理论篇)
  • JAVA学习笔记_JVM
  • SQL 中复杂 CASE WHEN 嵌套逻辑优化
  • STM32-笔记34-4G遥控灯
  • 被催更了,2025元旦源码继续免费送
  • Java(day1)
  • PDF文件提示-文档无法打印-的解决办法
  • ubuntu操作系统安装SSH服务
  • Beamer-LaTeX学习(教程批注版)【1】