首页
社区
课程
招聘
[旧帖] [求助]为什么要修改窗口类名 0.00雪花
发表于: 2009-9-20 09:59 1361

[旧帖] [求助]为什么要修改窗口类名 0.00雪花

2009-9-20 09:59
1361
下面是罗云彬一书中的某个例子,用同一个窗口类创建两个出口,可是在创建第二个窗口的时候,修改了窗口类的类名,这是为什么?

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by , http://www.win32asm.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; DcCopy.asm
; 测试设备环境的代码,将一个窗口 DC 对应的象素拷贝到另一个窗口中
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff DcCopy.asm
; Link /subsystem:windows DcCopy.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                gdi32.inc
includelib        gdi32.lib
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_TIMER        equ        1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWin1                dd                ?
hWin2                dd                ?

                .const
szClass1        db        'SourceWindow',0
szClass2        db        'DestWindow',0
szCaption1        db        '请尝试用别的窗口覆盖本窗口!',0
szCaption2        db        '本窗口图像拷贝自另一窗口',0
szText                db        'Win32 Assembly, Simple and powerful !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 定时器过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcTimer        proc        _hWnd,uMsg,_idEvent,_dwTime
                local        @hDc1,@hDc2
                local        @stRect:RECT

                invoke        GetDC,hWin1
                mov        @hDc1,eax
                invoke        GetDC,hWin2
                mov        @hDc2,eax
                invoke        GetClientRect,hWin1,addr @stRect
                invoke        BitBlt,@hDc2,0,0,@stRect.right,@stRect.bottom,\
                        @hDc1,0,0,SRCCOPY
                invoke        ReleaseDC,hWin1,@hDc1
                invoke        ReleaseDC,hWin2,@hDc2
                ret

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

                mov        eax,uMsg
                mov        ecx,hWnd
;********************************************************************
                .if        eax ==        WM_PAINT && ecx == hWin1
                        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        PostQuitMessage,NULL
                        invoke        DestroyWindow,hWin1
                        invoke        DestroyWindow,hWin2
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG
                local        @hTimer

                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 szClass1
                invoke        RegisterClassEx,addr @stWndClass
                invoke        CreateWindowEx,WS_EX_CLIENTEDGE,offset szClass1,offset szCaption1,\
                        WS_OVERLAPPEDWINDOW,\
                        450,100,300,300,\
                        NULL,NULL,hInstance,NULL
                mov        hWin1,eax
                invoke        ShowWindow,hWin1,SW_SHOWNORMAL
                invoke        UpdateWindow,hWin1
;********************************************************************
                mov        @stWndClass.lpszClassName,offset szClass2
                invoke        RegisterClassEx,addr @stWndClass
                invoke        CreateWindowEx,WS_EX_CLIENTEDGE,offset szClass2,offset szCaption2,\
                        WS_OVERLAPPEDWINDOW,\
                        100,100,300,300,\
                        NULL,NULL,hInstance,NULL
                mov        hWin2,eax
                invoke        ShowWindow,hWin2,SW_SHOWNORMAL
                invoke        UpdateWindow,hWin2
;********************************************************************
; 设置定时器
;********************************************************************
                invoke        SetTimer,NULL,NULL,100,addr _ProcTimer
                mov        @hTimer,eax
;********************************************************************
; 消息循环
;********************************************************************
                .while        TRUE
                        invoke        GetMessage,addr @stMsg,NULL,0,0
                        .break        .if eax        == 0
                        invoke        TranslateMessage,addr @stMsg
                        invoke        DispatchMessage,addr @stMsg
                .endw
;********************************************************************
; 清除定时器
;********************************************************************
                invoke        KillTimer,NULL,@hTimer
                ret

_WinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是创建了两个窗口实例吧,窗口类并没有变啊
2009-9-20 10:24
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可视类名变了
不知道他要变类名干嘛
2009-9-20 10:28
0
游客
登录 | 注册 方可回帖
返回
//