Добрый вечер. Пытаюсь отобразить битмэп в своем диалоге. Главный код модуля: Код (Text): .386 .model flat, stdcall option casemap: none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib DlgProc Proto hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .const IDB_MYOWNBITMAP equ 100 IDD_DLG1001 equ 101 .data hInstance DWORD ? hBitmap DWORD ? .code start: invoke GetModuleHandle, NULL mov hInstance, eax invoke DialogBoxParam, hInstance, IDD_DLG1001, 0, addr DlgProc, 0 invoke ExitProcess, NULL DlgProc Proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL hdc:HDC LOCAL hMemDC:HDC LOCAL rect:RECT .if uMsg==WM_CREATE invoke LoadBitmap,hInstance,IDB_MYOWNBITMAP mov hBitmap,eax .elseif uMsg==WM_PAINT invoke BeginPaint,hWnd,addr ps mov hdc,eax invoke CreateCompatibleDC,hdc mov hMemDC,eax invoke SelectObject,hMemDC,hBitmap invoke GetClientRect,hWnd,addr rect invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY invoke DeleteDC,hMemDC invoke EndPaint,hWnd,addr ps .elseif uMsg==WM_DESTROY invoke DeleteObject,hBitmap invoke PostQuitMessage,NULL .endif xor eax,eax ret DlgProc Endp end start Файл рессурса: Код (Text): #define IDB_MYOWNBITMAP 100 #define IDD_DLG1001 101 IDB_MYOWNBITMAP BITMAP "Picture.bmp" IDD_DLG1001 DIALOGEX 0,0,199,100 CAPTION "Patch #1" FONT 8,"MS Sans Serif" STYLE 0x10c80000 EXSTYLE 0x00000000 BEGIN END Линкую и Компаную следующим бат-файлом: Код (Text): \masm32\bin\rc style.rc \masm32\bin\Ml /Cp /c /coff bm.asm \masm32\bin\link /subsystem:windows bm.obj style.res Окно отображается, но изображение не появляется. Файл с изображением в атаче.
В диалог WM_CREATE, WM_DESTROY не приходят, вместо них WM_INITDIALOG, WM_CLOSE замени и всё заработает. И вместо PostQuitMessage правильно EndDialog.
Что говорит дебагер после отработки LoadBitmap и BitBlt? Думаю, Load не выполнится вообще - ибо должен прийти WM_INITDIALOG а не WM_CREATE. ЗЫ. тфу опоздал =)