为什么没有窗口显示?

问题描述 投票:0回答:1

我正在尝试使用 x86 masm 中的 windows api 打开一个窗口。下面的代码以代码 0 执行,我不明白为什么没有窗口出现。

.code
WindowProc proc wHWND:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    LOCAL wc:WNDCLASSEXA

    .if uMsg == 1
        mov eax, lParam
        mov [wHWND], eax
    .elseif uMsg == 2
        invoke ExitProcess, 0
    .else
        invoke DefWindowProcA, wHWND, uMsg, wParam, lParam
        ret
    .endif
    
    xor eax, eax
    ret
WindowProc endp

wWinMain proc hInstance:DWORD, hPrevInstance:DWORD, pCmdLine:DWORD, nCmdShow:DWORD
    LOCAL wc:WNDCLASSEXA

mov dword ptr [wc.cbSize], 48
    mov eax, 2
    or eax, 1
    mov dword ptr [wc.style], eax
    mov dword ptr [wc.lpfnWndProc], OFFSET WindowProc
    mov dword ptr [wc.cbClsExtra], 0
    mov dword ptr [wc.cbWndExtra], 0
    mov eax, dword ptr [hInstance]
    mov dword ptr [wc.hInstance], eax
    mov dword ptr [wc.hbrBackground], 5
    mov dword ptr [wc.lpszClassName], OFFSET className
    lea eax, [wc]
    invoke RegisterClassExA, eax
    mov eax, 0
    or eax, 12582912
    or eax, 524288
    or eax, 262144
    or eax, 131072
    or eax, 65536
    invoke CreateWindowExA, 0, OFFSET className, OFFSET WindowName, eax, 360, 140, 362, 382, 0, 0, hInstance, 0
    mov dword ptr [windowHWND], eax
    INVOKE ExitProcess, 0
wWinMain endp
    end wWinMain

这只是 asm 的 .code 部分。 wWinMain 是入口点,很多数字是 Windows 枚举并定义,即 12582912,524288,262144,131072,65536

windows assembly winapi x86 masm
1个回答
0
投票

浏览整个文档,模块 1.您的第一个 Windows 程序

从Windows桌面编程的角度来看,您的应用程序需要消息循环,正如@500-InternalServerError所指出的那样。其余的,正如@IInspectable所说

您对 CreateWindowExA 的调用未指定 WS_VISIBLE 窗口 样式,因此窗口最初创建时是隐藏的。你不得不 设置 WS_VISIBLE 标志,或调用 ShowWindow 来切换可见性 一点。

© www.soinside.com 2019 - 2024. All rights reserved.