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

win32汇编环境,窗口程序显示bmp图像文件

;运行效果

;win32汇编环境,窗口程序显示bmp图像文件
;显示的是一张尺寸236*318的bmp位图,及一张缩小为原来三分之一的位图
;将代码复制进radasm软件里,直接编译就可以运行了
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option          casemap:none 

include         windows.inc 
include         user32.inc 
includelib      user32.lib           
include         kernel32.inc 
includelib      kernel32.lib 
include        gdi32.inc
includelib    gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD      
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                               
.DATA                                   
ClassName   db "SimpleWinClass",0       
AppName     db "窗口程序显示bmp位图文件",0 

szFileName01       db    "a.bmp",0      
szErrOpenFile       db    "无法打开文件!",0
szCheshi           db    "测试",0

.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, 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+1 
    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,100,100,400,600, NULL,NULL,hInst, NULL 
    mov   hwnd,eax 
    invoke ShowWindow, hwnd,CmdShow                             
    invoke UpdateWindow, hwnd                                    

    .WHILE TRUE                                                  
                invoke GetMessage, ADDR msg,NULL,0,0 
                .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 
    LOCAL     @stPs:PAINTSTRUCT
    LOCAL    @hDc,@hdcMem 
    LOCAL   @hbmpBack:HBITMAP
    LOCAL   @hOldBmp:HBITMAP
    
        .if uMsg == WM_CREATE
            
    .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,70,30,236,318,@hdcMem,0,0,SRCCOPY     ;将兼容上下文的内容拷贝到设备上下文,即显示出来,不可拉伸

                invoke  SetStretchBltMode,@hDc,HALFTONE                   ;设置拉伸模式
                invoke  StretchBlt,@hDc,150,400,78,106,@hdcMem,0,0,236,318,SRCCOPY     ;拉伸为原尺寸的三分之一
                
                invoke  SelectObject,@hdcMem,@hOldBmp                     ;删除现在使用的位图句柄,清除现场 
                invoke  DeleteDC,@hdcMem                                  ;销毁临时的内存DC
                invoke    EndPaint,hWnd,addr @stPs                
        .elseif uMsg == WM_DESTROY                                      
                invoke PostQuitMessage,NULL                                
        .else 
                invoke DefWindowProc,hWnd,uMsg,wParam,lParam             
        ret 
    .endif 
    xor eax,eax 
    ret 
WndProc endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
end start                                                        


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

相关文章:

  • 洛谷B4071 [GESP202412 五级] 武器强化
  • Idea(中文版) 项目结构/基本设置/设计背景
  • HTML——20 自定义属性
  • 数字PWM直流调速系统设计(论文+源码)
  • rouyi(前后端分离版本)配置
  • 如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]
  • Structured-Streaming集成Kafka
  • LinuxC高级day5
  • CTFshow—远程命令执行
  • Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!
  • 国产编辑器EverEdit - 常用资源汇总
  • ubuntu开启root用户
  • ruoyi开发学习
  • 【计组不挂科】计算机组成综合习题库(选择题207道&判断题93道&填空题143道)(含答案与解析)
  • 数据挖掘——聚类
  • 【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
  • 嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)
  • Geotrust SSL证书
  • PHP入门笔记汇总
  • CG顶会论文阅读|《科技论文写作》硕士课程报告
  • 51c自动驾驶~合集44
  • Javascript算法——回溯算法(组合问题)
  • 25年1月更新。Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)
  • 用Tkinter制作一个用于合并PDF文件的小程序
  • linux安装git
  • 【Rust自学】9.4. 什么时候该使用panic!