2016-03-28 92 views
0

我在大學獲得了作業:在MASM中編寫遊戲。我選擇了一款「三連勝」的遊戲。遊戲中的對象是一些糖果:冰淇淋,棒棒糖等,但我有一個問題。我不知道如何製作不同圖像的兒童窗戶。我試過了,但沒有任何工作。也許有人知道如何實現這一點?任何幫助表示讚賞。即使在C/C++。如果有人用口頭向我解釋如何去做,我會很高興。對我來說主要是理解這個概念。Win32 API:具有不同圖像的子窗口

enter image description here

但我需要這個

enter image description here

+0

開始學習如何做到這一點的C++ –

+0

何處是你的代碼? –

+0

@DavidHeffernan對我來說,寫什麼編程語言並不重要。正如我已經提到的,我只是不知道如何實現它。 –

回答

3

當然,你只有一個形象,因爲hBit是一個全局變量,hBit在所有呼叫覆蓋事實上,CreateSweetsWindow:它保留了最後一個加載的圖像。

我建議你添加hBit到SweetsWindowStruct結構:

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

而且(在你的sweets.asm文件第44行)刪除全局hBit,你必須改變這樣的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] 

請檢查

+0

非常感謝。這正是我需要的。 –