горизонтальные полосы при обновлении Bitmap

Тема в разделе "WASM.BEGINNERS", создана пользователем skyman1221, 29 дек 2011.

  1. skyman1221

    skyman1221 New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2011
    Сообщения:
    24
    Приветствую знатоков
    сам я пока начинающий в masm

    есть задача
    написать приложение типа экранной лупы

    как создать окно и вывести туда часть экрана я понял

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\user32.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\masm32.inc
    9. include \masm32\include\debug.inc
    10. include \masm32\include\gdi32.inc
    11. includelib \masm32\lib\masm32.lib
    12. includelib \masm32\lib\debug.lib
    13. includelib \masm32\lib\user32.lib
    14. includelib \masm32\lib\kernel32.lib
    15. includelib \masm32\lib\gdi32.lib
    16.  
    17.  
    18. trace macro text
    19.     invoke dw2hex, text, ADDR Apptest
    20.     invoke MessageBox, NULL, addr Apptest, addr Apptest, MB_OK
    21. endm
    22.  
    23.  
    24. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    25. IDB_MAIN    equ 1
    26.  
    27. .data
    28. ClassName   db "SimpleWin32ASMBitmapClass",0
    29. AppName     db "Win32ASM Simple Bitmap Example",0
    30.  
    31. .data?
    32. hInstance   HINSTANCE ?
    33. CommandLine LPSTR ?
    34. hBitmap     dd ?
    35. gghwnd      HWND ?
    36. Apptest     db ?
    37. .code
    38. start:
    39.     invoke GetModuleHandle, NULL
    40.     mov hInstance,eax
    41.     invoke GetCommandLine
    42.     mov CommandLine,eax
    43.     invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    44.     invoke ExitProcess,eax
    45.  
    46. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    47. LOCAL wc:WNDCLASSEX
    48. LOCAL msg:MSG
    49. LOCAL hwnd:HWND
    50.  
    51.     mov wc.cbSize,SIZEOF WNDCLASSEX
    52.     mov wc.style, CS_HREDRAW or CS_VREDRAW
    53.     mov wc.lpfnWndProc, OFFSET WndProc
    54.     mov wc.cbClsExtra,NULL
    55.     mov wc.cbWndExtra,NULL
    56.     push hInstance
    57.     pop wc.hInstance
    58.     mov wc.hbrBackground, COLOR_WINDOW
    59.     mov wc.lpszMenuName,NULL
    60.     mov wc.lpszClassName,OFFSET ClassName
    61.     invoke LoadIcon,NULL,IDI_APPLICATION
    62.     mov wc.hIcon,eax
    63.     mov wc.hIconSm,eax
    64.     invoke LoadCursor,NULL,IDC_ARROW
    65.     mov wc.hCursor,eax
    66.     invoke RegisterClassEx, addr wc
    67.     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
    68.         WS_OVERLAPPEDWINDOW , CW_USEDEFAULT,\
    69.         CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
    70.         hInst,NULL
    71.     mov hwnd,eax
    72.     mov gghwnd,eax
    73.     invoke ShowWindow, hwnd, SW_SHOWNORMAL
    74.     invoke UpdateWindow, hwnd
    75.     .while TRUE
    76.         invoke GetMessage, ADDR msg,NULL,0,0
    77.         .break .if (!eax)
    78.         invoke TranslateMessage, ADDR msg
    79.         invoke DispatchMessage, ADDR msg
    80.     .endw
    81.     mov eax,msg.wParam
    82.     ret
    83.  
    84. WinMain endp
    85.  
    86. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    87. LOCAL ps:PAINTSTRUCT
    88. LOCAL hdc:HDC
    89. LOCAL hMemDC:HDC
    90. LOCAL rect:RECT
    91. LOCAL hMemoryDC:HDC
    92.  
    93.     .if uMsg==WM_CREATE
    94.         invoke LoadBitmap,hInstance,IDB_MAIN
    95.         mov hBitmap,eax
    96.         invoke SetTimer,hWnd,1,100,NULL
    97.     .elseif uMsg==WM_TIMER
    98.         invoke InvalidateRect, hWnd,NULL,TRUE
    99.     .elseif uMsg==WM_PAINT
    100.    
    101.         invoke BeginPaint,hWnd,addr ps
    102.         mov hdc,eax
    103.         invoke SelectObject,hMemDC,hBitmap
    104.         invoke GetClientRect,hWnd,addr rect
    105.         invoke GetDC, 0
    106.         mov hMemDC,eax
    107.  
    108.         invoke CreateSolidBrush, 0000000h
    109.         push eax
    110.        
    111.         invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0, SRCCOPY
    112.         invoke DeleteDC,hMemDC
    113.         invoke EndPaint,hWnd,addr ps
    114.         invoke DeleteDC,hdc
    115.        
    116.     .elseif uMsg==WM_DESTROY
    117.         invoke DeleteObject,hBitmap
    118.         invoke PostQuitMessage,NULL
    119.     .ELSE
    120.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    121.         ret
    122.     .ENDIF
    123.     xor eax,eax
    124.     ret
    125.  
    126. WndProc endp
    127. end start
    код работает
    но при обновлении изображения возникают горизонтальные полосы
    хотелось бы их устранить

    поиск по форуму и гуглу в этом направлении почти ничего не дал
    где то прочитал только что надо включить аппаратное ускорение и тогда полосы пропадут
    как это лучше сделать, есть ли другие способы?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    skyman1221
    Да ну? а здесь смотрел?
    Wasm.ru-->ИСХОДНИКИ --> Графика -->linza by MoonChild (9.87 kb) "Увеличительное стекло": полезна для того, чтобы получить цвет любого пикселя на экpане. Рульно показывает увеличение фрагментов рабочего стола, окошек и т.п. И полос никаких... Да и в гугле если набрать "исходники экранная лупа ассемблер" можно для изучения найти кучу исходных текстов http://www.google.com/url?sa=t&rct=..._sCoAQ&usg=AFQjCNE7FMBU3zwpyGBcRgTe60grb41HvQ, http://www.google.com/url?sa=t&rct=..._sCoAQ&usg=AFQjCNGDNNCocQQ6dlgdh3uTp54z6whPtw и т.п.
     
  3. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    mov wc.hbrBackground, COLOR_WINDOW

    0 поставьте и на WM_PAINT надо сначала всё нарисовать на DC, который создан в памяти, потом перерисовать на реальный DC окна...
     
  4. skyman1221

    skyman1221 New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2011
    Сообщения:
    24
    всем спасибо большое
    скачал linza by MoonChild
    разобрался как работает переделал под себя =)