Replace Bitmap

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 2 янв 2011.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Мне нужно две картинки разместить на окне, и затем поменять их местами.
    Кароче, одна шахмата слева, другая справа,
    [​IMG][​IMG]
    Вопрос в том как хранить эти ресурсы и как загружать в окно? Какие апи почитать?
    Я только одну картинку могу загружать в DialogBoxParam, две не знаю, ни разу не видел.

    Может ли быть здесь полезным через GDI рисование фигур и заливка их цветом всмысле
    скорости работы и более удачного кода? Мне вобщем-то не важно значение фигур на рисунке.
    Или GDI не нужны.

    Может готовый пример имеется чтонибудь подходящее?
    Переключать картинки буду ComboBox-ом...
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Ну вот например так пойдет?
    [​IMG]
     
  3. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    Semiono
    На этапе отладки можно хранить в отдельных файлах формата .bmp.
    Загружать с помощью CreateFile, ReadFile, HeapAlloc.
    Инициализировать с помощью CreateDIBitmap, CreateCompatibleDC, CreateCompatibleBitmap, SelectObject.
    Рисовать в окне с помощью BitBlt во время обработки события WM_PAINT, либо в теневом буфере.
    Удалять выделенные ресурсы с помощью: DeleteDC, DeleteObject, HeapFree.
     
  4. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Вот пару процедурок:

    Код (Text):
    1. ShowBMP2Static  proc    hSTC:DWORD,hBmp:HBITMAP,Mode:DWORD
    2. LOCAL   rect:RECT
    3. LOCAL   BmpInfo:BITMAP
    4. LOCAL   Hw:DWORD
    5. LOCAL   Ww:DWORD
    6.  
    7.     invoke  GetObject,[hBmp],sizeof(BITMAP),ADDR BmpInfo
    8.  
    9.     invoke  GetClientRect,[hSTC],ADDR rect
    10.  
    11. ;   mov     eax,        [rect].right
    12. ;   sub     eax,        [rect].left
    13. ;   mov     [Ww],           eax
    14. ;
    15. ;   mov     ebx,        [rect].bottom
    16. ;   sub     ebx,        [rect].top
    17. ;   mov     [Hw],           ebx
    18.  
    19.     mov     eax,            156
    20.     mov     [Ww],           eax
    21.     mov     [Hw],           eax
    22.  
    23.     .if     [Mode]==1
    24.         xor     edx,        edx
    25.  
    26.         mov     eax,        [BmpInfo].bmHeight
    27.         div     [Hw]
    28.         mov     ecx,        eax
    29.  
    30.         xor     edx,        edx
    31.  
    32.         mov     eax,        [BmpInfo].bmWidth
    33.         div     [Ww]
    34.  
    35.         .if     eax>ecx
    36.             ;Hw=Ww*H/W
    37.             invoke  MulDiv,[Ww],[BmpInfo].bmHeight,[BmpInfo].bmWidth
    38.             mov     [Hw],       eax
    39.         .else
    40.             ;Ww=W*Hw/H
    41.             invoke  MulDiv,[Hw],[BmpInfo].bmWidth,[BmpInfo].bmHeight
    42.             mov     [Ww],       eax
    43.         .endif
    44.     .endif
    45.  
    46.     invoke  CopyImage,[hBmp],IMAGE_BITMAP,[Ww],[Hw],LR_CREATEDIBSECTION
    47.     push    eax
    48.     invoke  SendMessage,[hSTC],STM_SETIMAGE,IMAGE_BITMAP,eax
    49.     .if eax
    50.         invoke  DeleteObject,eax
    51.     .endif
    52.     pop     eax
    53.     ret
    54.  
    55. ShowBMP2Static endp
    56.  
    57. ShowBMP2Button  proc    hSTC:DWORD,hBmp:HBITMAP,Mode:DWORD
    58. LOCAL   rect:RECT
    59. LOCAL   BmpInfo:BITMAP
    60. LOCAL   Hw:DWORD
    61. LOCAL   Ww:DWORD
    62.  
    63.     invoke  GetObject,[hBmp],sizeof(BITMAP),ADDR BmpInfo
    64.  
    65.     invoke  GetClientRect,[hSTC],ADDR rect
    66.  
    67.     mov     eax,        [rect].right
    68.     sub     eax,        [rect].left
    69.     mov     [Ww],           eax
    70.  
    71.     mov     ebx,        [rect].bottom
    72.     sub     ebx,        [rect].top
    73.     mov     [Hw],           ebx
    74.  
    75. ;   mov     eax,            160
    76. ;   mov     [Ww],           eax
    77. ;   mov     [Hw],           eax
    78.  
    79.     .if     [Mode]==1
    80.         xor     edx,        edx
    81.  
    82.         mov     eax,        [BmpInfo].bmHeight
    83.         div     [Hw]
    84.         mov     ecx,        eax
    85.  
    86.         xor     edx,        edx
    87.  
    88.         mov     eax,        [BmpInfo].bmWidth
    89.         div     [Ww]
    90.  
    91.         .if     eax>ecx
    92.             ;Hw=Ww*H/W
    93.             invoke  MulDiv,[Ww],[BmpInfo].bmHeight,[BmpInfo].bmWidth
    94.             mov     [Hw],       eax
    95.         .else
    96.             ;Ww=W*Hw/H
    97.             invoke  MulDiv,[Hw],[BmpInfo].bmWidth,[BmpInfo].bmHeight
    98.             mov     [Ww],       eax
    99.         .endif
    100.     .endif
    101.  
    102.     invoke  CopyImage,[hBmp],IMAGE_BITMAP,[Ww],[Hw],LR_CREATEDIBSECTION
    103.     push    eax
    104.     invoke  SendMessage,[hSTC],BM_SETIMAGE,IMAGE_BITMAP,eax
    105.     .if eax
    106.         invoke  DeleteObject,eax
    107.     .endif
    108.     pop     eax
    109.     ret
    110.  
    111. ShowBMP2Button endp
    File: Dlg.Rc

    Код (Text):
    1. #define IDD_DIALOG 1000
    2. #define IDC_DIR 1001
    3. #define IDC_BTN1 1002
    4. #define IDC_DRIVE 1004
    5. #define IDC_FILE 1005
    6. #define IDC_IMG 1006
    7. IDD_DIALOG DIALOGEX 6,6,268,189
    8. CAPTION "Dialog As Main"
    9. FONT 8,"MS Sans Serif",0,0
    10. CLASS "DLGCLASS"
    11. STYLE 0x10CB0000
    12. EXSTYLE 0x00000000
    13. BEGIN
    14.   CONTROL "",IDC_DIR,"ListBox",0x50210541,0,17,123,57,0x00000200
    15.   CONTROL "IDC_BTN",IDC_BTN1,"Button",0x50810080,126,77,142,100,0x00000201
    16.   CONTROL "",IDC_DRIVE,"ComboBox",0x50210343,0,1,123,67,0x00000000
    17.   CONTROL "",IDC_FILE,"ListBox",0x50210143,126,1,142,74,0x00000200
    18.   CONTROL "Static",IDC_IMG,"Static",0x5000830E,0,77,124,100,0x00000201
    19. END
    Используем гдето так.

    Код (Text):
    1.                     invoke  GetDlgItem,[hWnd],IDC_IMG
    2.                     invoke  ShowBMP2Static,eax,[hBmp1],1
    3.                    
    4.                     invoke  GetDlgItem,[hWnd],IDC_BTN1
    5.                     invoke  ShowBMP2Button,eax,[hBmp1],1
    Нужные картинки подгужаем LoadImage(...) или чем удобно.