Приветствую знатоков сам я пока начинающий в masm есть задача написать приложение типа экранной лупы как создать окно и вывести туда часть экрана я понял Код (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\masm32.inc include \masm32\include\debug.inc include \masm32\include\gdi32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\debug.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib trace macro text invoke dw2hex, text, ADDR Apptest invoke MessageBox, NULL, addr Apptest, addr Apptest, MB_OK endm WinMain proto :DWORD,:DWORD,:DWORD,:DWORD IDB_MAIN equ 1 .data ClassName db "SimpleWin32ASMBitmapClass",0 AppName db "Win32ASM Simple Bitmap Example",0 .data? hInstance HINSTANCE ? CommandLine LPSTR ? hBitmap dd ? gghwnd HWND ? Apptest db ? .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground, COLOR_WINDOW mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW , CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL mov hwnd,eax mov gghwnd,eax invoke ShowWindow, hwnd, SW_SHOWNORMAL invoke UpdateWindow, hwnd .while TRUE invoke GetMessage, ADDR msg,NULL,0,0 .break .if (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .endw mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL hdc:HDC LOCAL hMemDC:HDC LOCAL rect:RECT LOCAL hMemoryDC:HDC .if uMsg==WM_CREATE invoke LoadBitmap,hInstance,IDB_MAIN mov hBitmap,eax invoke SetTimer,hWnd,1,100,NULL .elseif uMsg==WM_TIMER invoke InvalidateRect, hWnd,NULL,TRUE .elseif uMsg==WM_PAINT invoke BeginPaint,hWnd,addr ps mov hdc,eax invoke SelectObject,hMemDC,hBitmap invoke GetClientRect,hWnd,addr rect invoke GetDC, 0 mov hMemDC,eax invoke CreateSolidBrush, 0000000h push eax invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0, SRCCOPY invoke DeleteDC,hMemDC invoke EndPaint,hWnd,addr ps invoke DeleteDC,hdc .elseif uMsg==WM_DESTROY invoke DeleteObject,hBitmap invoke PostQuitMessage,NULL .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start код работает но при обновлении изображения возникают горизонтальные полосы хотелось бы их устранить поиск по форуму и гуглу в этом направлении почти ничего не дал где то прочитал только что надо включить аппаратное ускорение и тогда полосы пропадут как это лучше сделать, есть ли другие способы?
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 и т.п.
mov wc.hbrBackground, COLOR_WINDOW 0 поставьте и на WM_PAINT надо сначала всё нарисовать на DC, который создан в памяти, потом перерисовать на реальный DC окна...