首页 > 编程语言 >汇编-窗口基本过程

汇编-窗口基本过程

时间:2024-02-04 11:16:18浏览次数:30  
标签:基本 汇编 窗口 addr invoke mov eax stWndClass NULL

 

.386  
.model flat,stdcall 
option casemap:none
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

include windows.inc 
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc 
includelib kernel32.lib


.data?
hInstance dd ?
hWinMain dd ?

.const
szClassName    db    'MyClass',0
szCaptionMain    db    '窗口标题',0
szText        db    '窗口文本',0

  
 
.code  

;窗口过程
_ProcWinMain    proc    uses ebx edi esi ,hWnd,uMsg,wParam,lParam
        local    @stPs:PAINTSTRUCT
        local    @stRect:RECT
        local    @hDc

        mov    eax,uMsg
;********************************************************************
        .if    eax ==    WM_PAINT
            invoke    BeginPaint,hWnd,addr @stPs
            mov    @hDc,eax

            invoke    GetClientRect,hWnd,addr @stRect
            invoke    DrawText,@hDc,addr szText,-1,\
                addr @stRect,\
                DT_SINGLELINE or DT_CENTER or DT_VCENTER

            invoke    EndPaint,hWnd,addr @stPs
;********************************************************************
        .elseif    eax ==    WM_CLOSE
            invoke    DestroyWindow,hWinMain
            invoke    PostQuitMessage,NULL
;********************************************************************
        .else
            invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
            ret
        .endif
;********************************************************************
        xor    eax,eax
        ret

_ProcWinMain    endp

_WinMain    proc
            local    @stWndClass:WNDCLASSEX
            local    @stMsg:MSG

            invoke    GetModuleHandle,NULL
            mov    hInstance,eax
            invoke    RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

; 注册窗口类
        invoke    LoadCursor,0,IDC_ARROW
        mov    @stWndClass.hCursor,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    RegisterClassEx,addr @stWndClass

; 建立并显示窗口
        invoke    CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,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

        start:
        call    _WinMain
        invoke    ExitProcess,NULL

        end    start

示例工程下载:

链接:https://pan.baidu.com/s/1jRjcRwAu0Ib_G6kSRgBwzw
提取码:6666

 

 

 

 

 

 

标签:基本,汇编,窗口,addr,invoke,mov,eax,stWndClass,NULL
From: https://www.cnblogs.com/liming19680104/p/18005801

相关文章

  • 安卓开发四——账本基本页面
    账本基本页面就是一个添加页面,一个浏览页面,浏览页面的一条数据项是一个视图。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto&quo......
  • kafka系列(一)【消息队列、Kafka的基本概念、Kafka的工作机制、Kafka可满足的需求、Kafk
    (kafka系列一)转自《Kafka并不难学!入门、进阶、商业实战》一、消息队列1.消息队列的来源在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞。例如,大量的插入、更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的......
  • 图像显示窗口名支持中文 使用cv2.imshow()显示图像默认是不支持中文名称的窗口的
    图像显示窗口名支持中文   使用cv2.imshow()显示图像默认是不支持中文名称的窗口的,如果你的窗口名参数中包含中文将会显示为乱码。这是由于在OpenCV-Python包中,imshow函数的窗口标题是gbk编码,而Python3默认UTF-8编码。因而窗口标题包含中文时,会显示乱码。    解决这个问......
  • pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字
    导语 pygame是一个跨平台Python库(pygamenews),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模块等。使用pygame,理论上可以开发设计市面上所有的2D类型游戏。优点:pygame免费、开源,支持多种操作系统,具有......
  • NCC跳转UClient窗口变空白
    NCC跳转UClient窗口变空白解决方法:1、找到配置文件:目录:nchome\ierp\sf\文件:sysconfig.xml2、修改后的文件内容:<?xmlversion='1.0'encoding='UTF-8'?><nc.login.vo.SystemConfig> <MaxLoginFailure>5</MaxLoginFailure> <LoginUIType>stan......
  • 计算机中的基本运算
    二进制的算术运算1.二进制的加法运算示例:0+0=00+1=11+0=11+1=101011+1001=101002,二进制的减法运算示例:1-1=01-0=10-0=00-1=1(解释一下这个,可以看作是向前借1,看作2-1)1101-1010=0011(当然前面的0是可以省略的)3.二进制的乘法运算示例:101X11=11114.二......
  • 动力节点最新RocketMQ基本操作-01
    动力节点最新RocketMQ基本操作1. RocketMQ简介MQ====MessageQueue编程中的 同步:排队一个一个走;一个动作做完以后,才能进行下一个异步:各走各的;两个动作可以同时做;官网:  http://rocketmq.apache.org/ RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发,RocketMQ 是......
  • [王崧-数论01]从自然数到算数基本定理
    $$\color{indigo}\large\text{[王崧-数论01]从自然数到算数基本定理}$$ $\large\mathbb{Part\01}\text{自然数,归纳和最小数原理}$$\text{1.1自然数}$$\mathbb{N_1=\{1,2,3,...\}}$$\mathbb{N_0=\{0,1,2,...\}}$$\mathbb{Z=\{0,\pm1,\pm2,\pm3...\}}$$\text{“道生一,一......
  • Selenium】控制当前已经打开的 chrome浏览器窗口
    Selenium】控制当前已经打开的chrome浏览器窗口前言有过几个小伙伴问过我如何利用 Selenium 获取已经打开的浏览器窗口,这里给安排了,还安排了两篇。这里使用 chrome浏览器 来做示例。整个下来主要有两个步骤,手动打开浏览器,使用 Python程序 去获取到手动打......
  • 【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)
    本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体包......