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

win32汇编环境,对话框中显示bmp图像文件

;运行效果

;win32汇编环境,对话框中显示bmp图像文件
;显示的是一张尺寸267*400的bmp位图,及一张缩小为原来三分之一的位图
;将代码复制进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 
include        gdi32.inc
includelib    gdi32.lib

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

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data 
DlgName            db    "MyDialog",0 
szFileName01       db    "a.bmp",0      
szErrOpenFile       db    "无法打开文件!",0
szCheshi           db    "测试",0

.data? 
hInstance HINSTANCE             ? 

.const 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ 1000    ;图标  
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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 
    LOCAL     @stPs:PAINTSTRUCT
    LOCAL    @hDc,@hdcMem 
    LOCAL   @hbmpBack:HBITMAP
    LOCAL   @hOldBmp:HBITMAP
    
        .if uMsg == WM_INITDIALOG 
                invoke    LoadIcon,hInstance,ICO_MAIN    ;加载图标
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
    .elseif uMsg == WM_PAINT
        invoke    BeginPaint,hWnd,addr @stPs
        mov    @hDc,eax
                ;刷新客户区的代码
                invoke  CreateCompatibleDC,@hDc                           ;依据屏幕显示DC创建内存DC设备描述表句柄
                mov @hdcMem,eax
                invoke  LoadImage,NULL,addr szFileName01,IMAGE_BITMAP,0,0,LR_LOADFROMFILE + LR_DEFAULTSIZE + LR_CREATEDIBSECTION
                mov @hbmpBack,eax
                .if eax == NULL
                    invoke    MessageBox,hWnd,addr szErrOpenFile,addr szCheshi,MB_OK or MB_ICONINFORMATION    ;如果弹出这个指示,大概率是图像有问题,建议把图像用ACD转成BMP,不要用网上在线转换,有时会少字节,不完整
                .endif
                invoke  SelectObject,@hdcMem,@hbmpBack                    ;位图先放入兼容的设备上下文中(兼容DC)
                mov @hOldBmp,eax
                invoke  SelectObject,@hdcMem,@hbmpBack                    ;位图句柄hbmpBack放到hdcMem中,236是图像宽度像素,318是高度像素
                invoke  BitBlt,@hDc,30,30,267,400,@hdcMem,0,0,SRCCOPY     ;将兼容上下文的内容拷贝到设备上下文,即显示出来,不可拉伸

                invoke  SetStretchBltMode,@hDc,HALFTONE                   ;设置拉伸模式
                invoke  StretchBlt,@hDc,320,180,89,133,@hdcMem,0,0,236,318,SRCCOPY     ;拉伸为原尺寸的三分之一
                
                invoke  SelectObject,@hdcMem,@hOldBmp                     ;删除现在使用的位图句柄,清除现场 
                invoke  DeleteDC,@hdcMem                                  ;销毁临时的内存DC
                invoke    EndPaint,hWnd,addr @stPs                            
        .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    //图标
  
ICO_MAIN    ICON        "Main.ico"

//定义对话框
MyDialog DIALOG 300, 100, 220, 230 
STYLE  WS_CAPTION | WS_MINIMIZEBOX | 
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK 
CAPTION "对话框中显示bmp图像文件" 

BEGIN 

END 


 


http://www.mrgr.cn/news/82335.html

相关文章:

  • 行为模式3.迭代器模式
  • 三种常见发票如何用软件批量查验真伪?91查验助手批量查验发票并自动保存截图
  • Dubbo 关键知识点解析:负载均衡、容错、代理及相关框架对比
  • 第十章 非线性数据结构
  • SpringBoot3 集成配置讲解 - SpringBoot3 与 SpringBoot2 的核心差别和升级理由。
  • 一文理解ssh,ssl协议以及应用
  • linux常用命令合集
  • 2025/1/2
  • MQ-导读
  • 设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
  • Windows下使用bat实现端口映射进程守护
  • 【技术新浪潮】DeepSeek-V3:中国AI的开源巨浪,全球AI格局的破局者
  • 使用Python,networkx构造有向图及无向图以及图合并等api
  • vue设计与实现-框架设计
  • FPGA随记——过约束
  • WPF的一些控件的触发事件记录
  • 我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
  • 在DJI无人机上运行VINS-FUISON(PSDK 转 ROS)
  • 人脑处理信息的速度与效率:超越计算机的直观判断能力
  • win32汇编环境,窗口程序显示bmp图像文件
  • Structured-Streaming集成Kafka
  • LinuxC高级day5
  • CTFshow—远程命令执行
  • Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!
  • 国产编辑器EverEdit - 常用资源汇总
  • ubuntu开启root用户