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

win32汇编环境,窗口程序中使用进度条控件

;运行效果

;win32汇编环境,窗口程序中使用进度条控件
;进度条控件主要涉及的是长度单位,每步步长,推进的时间。
;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程
;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样
;以下例子设置为2条进度条,通过比较,可以理解其原理。
;下面为asm文件,将代码复制进RadASM里面可以直接编译
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc 
includelib   user32.lib           
include      kernel32.inc 
includelib   kernel32.lib 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName           db "SimpleWinClass",0        
AppName             db "窗口程序的模版",0 
szPGClassName       db "msctls_progress32",0                ;进度条类名        

.DATA?                                  
hInstance     HINSTANCE  ?                
CommandLine   LPSTR      ?  
hID_PG01      dd         ?     ;进度条控件句柄
hID_PG02      dd         ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                
; Equ 等值定义
IDC_PGL01          equ 101     ;进度条控件标识符
IDC_PGL02          equ 102

ID_TIMER1          equ   1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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,250,200, 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 
        .if uMsg == WM_CREATE
                invoke CreateWindowEx,NULL,ADDR szPGClassName,NULL, WS_CHILDWINDOW+WS_VISIBLE,20,40,192,30,hWnd,IDC_PGL01,NULL,NULL     ;创建进度条,192这个值是试出来的,大概刚刚好走完10格的样子
                mov hID_PG01,eax
                invoke CreateWindowEx,NULL,ADDR szPGClassName,NULL, WS_CHILDWINDOW+WS_VISIBLE,20,100,192,30,hWnd,IDC_PGL02,NULL,NULL     
                mov hID_PG02,eax

                invoke    SendDlgItemMessage,hWnd,IDC_PGL01,PBM_SETRANGE32,0,1000             ;设置进度条的最小值为0,最大值为100.这个值设置的大小与单位时间相关。
                invoke    SendDlgItemMessage,hWnd,IDC_PGL01,PBM_SETSTEP,100,0                 ;设置进度条每次步进的增量为10
                
                invoke    SendDlgItemMessage,hWnd,IDC_PGL02,PBM_SETBARCOLOR,0,16711935        ;设进度条格子颜色为绿色,16711935是红色。这个值是RGB的值转化为10进制后的。不设的话默认是蓝色  
                invoke    SendDlgItemMessage,hWnd,IDC_PGL02,PBM_SETRANGE32,0,1000      
                invoke    SendDlgItemMessage,hWnd,IDC_PGL02,PBM_SETSTEP,10,0  
                
                invoke    SetTimer,hWnd,ID_TIMER1,1000,NULL                                   ;设定时器,1000即1秒
        .elseif uMsg == WM_TIMER     ;处理定时器消息
                mov     eax,wParam
                .if     eax == ID_TIMER1
                        invoke    SendDlgItemMessage,hWnd,IDC_PGL01,PBM_STEPIT,0,0            ;每秒走1格
                        invoke    SendDlgItemMessage,hWnd,IDC_PGL02,PBM_STEPIT,0,0            ;10秒走1格,因为步长不一样 
                .endif           
        .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.kler.cn/a/531084.html

相关文章:

  • python-leetcode-二叉树的层序遍历
  • java异常处理——try catch finally
  • Linux - 进程间通信(3)
  • 剑指offer 链表 持续更新中...
  • 【背包问题】二维费用的背包问题
  • 计算机毕业设计Python动漫推荐系统 漫画推荐系统 动漫视频推荐系统 机器学习 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • 上海路网道路 水系铁路绿色住宅地工业用地面图层shp格式arcgis无偏移坐标2023年
  • HarmonyOS:给您的应用添加通知
  • 计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)
  • 【Linux】--- 基础IO
  • 用deepseek R1把本地的AI工具都做成离线
  • !力扣 84. 柱状图中最大矩形
  • Java JWT 技术详解与实践指南
  • 【RocketMQ】RocketMq之IndexFile深入研究
  • 机器学习day5
  • 【PDF提取局部内容改名】批量获取PDF局部文字内容改名 基于QT和百度云api的完整实现方案
  • 后盾人JS -- 原型
  • C语言教学第四课:控制结构
  • 内核定时器3-用户空间定时器
  • Docker Hub 镜像 Pull 失败的解决方案
  • AJAX笔记进阶篇
  • 《使用Ollama部署DeepSeek并进行对话全过程记录》
  • Spring 面试题【每日20道】【其二】
  • 11.1 LangChain Chains 最佳实践:从流水线设计到生产部署的全链路指南
  • 35.Word:公积金管理中心文员小谢【37】
  • string例题