VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 520|回复: 4

[讨论] win32api的窗口注册和win32汇编窗口注册

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-5-11 12:02:33 | 显示全部楼层 |阅读模式
本帖最后由 wl1383838438 于 2020-5-11 12:11 编辑

基础入门语法将不再又详细的注释,望谅解,如疑惑请留言


C++窗口注册过程源码,

#include<windows.h>


//自定义的窗口过程
LRESULT  CALLBACK    MyWindowProc(HWND hWnd, UINT Msg,
        WPARAM wParam, LPARAM lParam)
{
        switch (Msg)
        {
        case  WM_DESTROY:
                PostQuitMessage(0);
                return   0;

        default:
                return  DefWindowProc(hWnd, Msg, wParam, lParam);
        }

        return 0;
}


int  WINAPI   WinMain(HINSTANCE  hInstance, HINSTANCE  hPrevInstance,
        LPSTR lpCmdLine, int  nShowCmd)
{
        //1.注册窗口类
        WNDCLASS  wnd;
        wnd.cbClsExtra = 0;
        wnd.cbWndExtra = 0;
        wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色
        wnd.hCursor= LoadCursor(NULL, IDC_ARROW);//光标
        wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标
        //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息
        wnd.lpfnWndProc =MyWindowProc;//自定义的窗口过程函数
        wnd.lpszClassName = L"MrHuang";//窗口类名
        wnd.lpszMenuName = NULL;//菜单资源名称
        wnd.style = CS_HREDRAW;//窗口类、样式
        wnd.hInstance = hInstance;//实例句柄
        RegisterClass(&wnd);

        //创建窗口(返回之前发送WM_CREATE)
        HWND  hWnd = CreateWindow(L"MrHuang",L"第一个窗口程序",
                WS_OVERLAPPEDWINDOW,100,100,300,300,NULL,NULL, hInstance,NULL );

        //显示窗口
        ShowWindow(hWnd, nShowCmd);

        //更新窗口(发送WM_PAINT)
        UpdateWindow(hWnd);

         //消息循环(收到WM_QUIT消息退出)
        MSG  msg;
        BOOL  bRet = false;
        while (bRet = GetMessage(&msg, hWnd, 0,0 ) )
        {
                 if (bRet == -1)
                 {
                         return -1;
                 }
                TranslateMessage(&msg);//翻译消息
                DispatchMessage(&msg);//分发消息到窗口过程
        }

}
其中re版本的大小是


win32api的窗口注册和win32汇编窗口注册



debug版本是

win32api的窗口注册和win32汇编窗口注册


接着是win32汇编的大小

win32api的窗口注册和win32汇编窗口注册


--------------------------------------------------------------分割线-----------------------------------------------------------------
下面代码在radasm以及masm32编译器中通过,基础语法将不再又详细注释,望海涵。
.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\userl32.lib
includelib c:\masm32\lib\kernel32.lib

.data?


hInstance         dd           ?

hWinMain            dd          ?

.data
szText           db           '你点击了鼠标',0
szCaption        db           '提示',0

.const

szClassName      db           'MyClass',0
szCaptionMain    db           '窗口程序',0


.code



;窗口过程函数
_ProcWinMain        proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
       
                    mov eax,uMsg
                   
                    .if eax==WM_CLOSE
                        invoke DestroyWindow,hWinMain
                        invoke PostQuitMessage,NULL
                        
                        .elseif eax==WM_LBUTTONDOWN
                                invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
                        .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,NULL,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;调用winman函数
             invoke ExitProcess,NULL;退出线程
end start;结束
















上一篇:win32汇编仿C++循环语句for do- while while
下一篇:简单的防od CE调试代码,以及破解!
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-5-11 15:48:13 | 显示全部楼层
kuroro 发表于 2020-5-11 14:38
你这个大小还只是动态编译的体积 静态更大

win32api的窗口注册和win32汇编窗口注册
68_avatar_middle
最佳答案
0 
在线会员 发表于 2020-5-11 18:04:07 | 显示全部楼层
niubile牛逼了
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-5-11 18:58:17 | 显示全部楼层
10_avatar_middle
最佳答案
0 
donate_vip 发表于 2020-5-14 08:28:20 | 显示全部楼层
楼主V5,继续哈,期待更多精彩的分享。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-12-2 14:47

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表