zoukankan      html  css  js  c++  java
  • Windows下的窗口程序

    再进一步、

    .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    ;WinMain 函数原型定义
    
    .DATA
    ClassName    db    "SimpleWinClass",0
    AppName        db    "My First Window",0
    
    .DATA?                            ;没有初始化的数据
    hInstance    HINSTANCE    ?
    CommandLine    LPSTR        ?            ;字符串指针变量
    
    .CODE
    start:
    ;-----------------------------------------------------------------------------------------------------------
    ;得到应用程序的句柄
    invoke    GetModuleHandle,NULL
    mov        hInstance,eax
    
    ;-----------------------------------------------------------------------------------------------------------
    ;得到命令行参数
    invoke    GetCommandLine
    mov        CommandLine,eax
    
    ;调用WinMain函数
    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,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                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_DESTROY
        invoke  PostQuitMessage,NULL
    .ELSE
        invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .endif
    xor eax,eax
    ret        
    WndProc endp
    
        
    end start    
  • 相关阅读:
    spring core源码解读之ASM4用户手册翻译之一asm简介
    nginx启动,重启,关闭命令
    linux LVM分区查看dm设备
    jdbc 对sqlite的基本操作
    linux配置多个ip
    细说Linux下的虚拟主机那些事儿
    打造字符界面的多媒体Linux系统
    linux计划crontab
    因修改/etc/ssh权限导致的ssh不能连接异常解决方法
    Linux修改主机名
  • 原文地址:https://www.cnblogs.com/icqw/p/4889995.html
Copyright © 2011-2022 走看看