Win32 API:子 windows 具有不同的图像

Win32 API: Child windows with different images

我在大学被分配了一项任务:在 MASM 中编写一个游戏。我选择了"three in a row"类型的游戏。游戏中的对象是一些糖果:冰淇淋、棒棒糖等。但我有一个问题。我不知道如何用不同的图像制作 child windows。我试过了,但没有任何效果。也许有人知道如何实现这个?任何帮助表示赞赏。即使在 C/C++。如果有人用语言向我解释如何去做,我会很高兴。对我来说最主要的是理解这个概念。

我有

但我需要这个

当然你只有一个图像,因为 hBit 是一个全局变量,hBit 在所有对 CreateSweetsWindow 的调用中被覆盖,事实上:它保留最后加载的图像。

我建议您将 hBit 添加到 SweetsWindowStruct 结构中:

SweetsWindowStruct struct
    stype   SWEETSTYPE     ?
    sweetsID DWORD         ?
    hBit HBITMAP           ?
SweetsWindowStruct ends

并删除全局 hBit(sweets.asm 文件中的第 44 行),您必须像这样更改 WM_PAINT 代码:

 .elseif [iMsg] == WM_PAINT

    invoke BeginPaint, [hwnd], addr ps
    mov [hdc], eax

    invoke CreateCompatibleDC, hdc
    mov [hMemDC], eax

    SweetsWindowStruct *sws;// sorry show you in c++
    sws = (SweetsWindowStruct*)GetWindowLong(hwnd, GWL_USERDATA);
    HBITMAP hBit = sws->hBit;

    invoke SelectObject, hMemDC, [hBit]
    mov [oldDC], eax

其他问题:我认为你有一个错误,你说:

invoke SetWindowLong, [hwnd], 0, addr [sws]

必须是:

invoke SetWindowLong, [hwnd], GWL_USERDATA, addr [sws]

请检查