Bitmap и Диалог

Тема в разделе "WASM.BEGINNERS", создана пользователем TheGrow, 15 сен 2008.

  1. TheGrow

    TheGrow New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    35
    Добрый вечер.

    Пытаюсь отобразить битмэп в своем диалоге.

    Главный код модуля:

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap: none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\user32.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\gdi32.inc  
    8. includelib \masm32\lib\gdi32.lib
    9. includelib \masm32\lib\user32.lib
    10. includelib \masm32\lib\kernel32.lib
    11.  
    12. DlgProc Proto hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    13.  
    14. .const
    15.   IDB_MYOWNBITMAP  equ  100
    16.   IDD_DLG1001      equ  101
    17. .data
    18.   hInstance DWORD ?
    19.   hBitmap   DWORD ?
    20. .code
    21.  
    22. start:
    23.     invoke GetModuleHandle, NULL
    24.     mov hInstance, eax
    25.     invoke DialogBoxParam, hInstance, IDD_DLG1001, 0, addr DlgProc, 0
    26.     invoke ExitProcess, NULL
    27.    
    28.    
    29. DlgProc Proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    30.     LOCAL ps:PAINTSTRUCT
    31.     LOCAL hdc:HDC
    32.     LOCAL hMemDC:HDC
    33.     LOCAL rect:RECT
    34.     .if uMsg==WM_CREATE
    35.         invoke LoadBitmap,hInstance,IDB_MYOWNBITMAP
    36.         mov hBitmap,eax
    37.     .elseif uMsg==WM_PAINT
    38.      invoke BeginPaint,hWnd,addr ps
    39.         mov    hdc,eax
    40.         invoke CreateCompatibleDC,hdc
    41.         mov    hMemDC,eax
    42.         invoke SelectObject,hMemDC,hBitmap
    43.         invoke GetClientRect,hWnd,addr rect
    44.         invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY
    45.         invoke DeleteDC,hMemDC
    46.         invoke EndPaint,hWnd,addr ps
    47.     .elseif uMsg==WM_DESTROY
    48.         invoke DeleteObject,hBitmap
    49.         invoke PostQuitMessage,NULL
    50.     .endif
    51.     xor eax,eax
    52.     ret
    53. DlgProc Endp
    54.  
    55. end start
    Файл рессурса:

    Код (Text):
    1. #define IDB_MYOWNBITMAP   100
    2. #define IDD_DLG1001       101
    3. IDB_MYOWNBITMAP  BITMAP  "Picture.bmp"
    4.  
    5. IDD_DLG1001 DIALOGEX 0,0,199,100
    6. CAPTION "Patch #1"
    7. FONT 8,"MS Sans Serif"
    8. STYLE 0x10c80000
    9. EXSTYLE 0x00000000
    10. BEGIN
    11.  
    12. END
    Линкую и Компаную следующим бат-файлом:

    Код (Text):
    1. \masm32\bin\rc style.rc
    2. \masm32\bin\Ml /Cp /c /coff bm.asm
    3. \masm32\bin\link /subsystem:windows bm.obj style.res
    Окно отображается, но изображение не появляется. Файл с изображением в атаче.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    В диалог WM_CREATE, WM_DESTROY не приходят, вместо них WM_INITDIALOG, WM_CLOSE замени и всё заработает.
    И вместо PostQuitMessage правильно EndDialog.
     
  3. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Что говорит дебагер после отработки LoadBitmap и BitBlt? Думаю, Load не выполнится вообще - ибо должен прийти WM_INITDIALOG а не WM_CREATE.

    ЗЫ. тфу опоздал =)
     
  4. TheGrow

    TheGrow New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    35
    Y_Mur , DEEP спасибо все работает заменил на WM_INITDIALOG, WM_CLOSE.