Chaos Napisano Październik 5, 2019 Autor Zgłoś Udostępnij Napisano Październik 5, 2019 problem juz byl poruszony na forum ale nie bylo w nim konkretnego przykladu (chodzi mi o kawalek kodu) jak to sie robi bo nie zabardzo mi to wychodzi i nie wiem gdzie robie blad z gory dzieki Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Aspect Napisano Październik 6, 2019 Zgłoś Udostępnij Napisano Październik 6, 2019 Jeżeli masz kod, który nie działa najlepiej go tutaj wkleić. Podwójne buforowanie ja implementuję tak: case WM_PAINT: { HDC hDC; // (1) HDC hdcMem; // (2) PAINTSTRUCT ps; hDC=BeginPaint(hwndChild,&ps); // (3) hdcMem=CreateCompatibleDC(hDC); // (4) ... // (5) BitBlt(hDC,0,0,200,200,hdcMem,0,0,SRCCOPY); // (6) DeleteDC(hdcMem); // (7) EndPaint(hwndChild,&ps); // (8) } break; Komentarze do linijek: 1. Deklarujesz uchwyt kontekstu ekranu (pierwszoplanowy). 2. Deklarujesz uchwyt kontekstu w pamięci (drugoplanowy). 3. Zaczynasz rysować (pobierasz uchwyt kontekstu ekranowego). 4. Tworzysz kontekst kompatybilny z ekranowym (w sensie ilości kolorów i innych parametrów) i pobierasz uchwyt do niego. 5. Tu sobie rysujesz na kontekscie w pamięci, czyli np. : Ellipse(hdcMem,50,50,100,100);. 6. Kopiujesz szybko zawartość jednego kontekstu do drugiego. 7. Zwalniasz kontekst w pamięci. 8. Kończysz rysowanie. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Chaos Napisano Październik 6, 2019 Autor Zgłoś Udostępnij Napisano Październik 6, 2019 dzieki za odpowiedz wlasnie tak to robilem ale chcialem w ten sposob wyswietlac bitmapy tzn kopiowac je do drugiego bufora a pozniej jako calos do pierwszego i nie wiem czy tak mozna a jak nie to czy sa jakies sposoby jak to zrobic i zalezy mi zeby to nie bylo skaplikowane bo potrzebuje tego do prpgramu w asemblerze pod win jezeli ktos moze to interesuja mnie fragmenty kodu ja to zrobic dzieki pozdrawiam Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Burn Napisano Październik 6, 2019 Zgłoś Udostępnij Napisano Październik 6, 2019 Witam! Nie wiem czy dokładnie zrozumiałem o co Ci chodzi. Bo troszkę namieszałeś :) Ale jeżeli chodzi Ci o kod kopiujący jedną bitmapę na drugą to go zamieszczem poniżej. I jeszcze jedno napisałeś że potrzebujesz kodu w assemlerze pod Windows więc na przyszłość sprecyzuj pytanie bo jest kilka odmian (min.: masm, fasm, tasm, nasm). Ten kod jest pod Masm i celowo nie używałem makra "invoke" abyś mógł go łatwo dostosować do innego kompilatora. LOCAL mDC1, mDC2 :HDC LOCAL bm :BITMAP ........ lea eax, dword ptr [bm] push eax push sizeof BITMAP push hBmp2 call GetObject push 0 call CreateCompatibleDC mov mDC1,eax push hBmp1 push eax call SelectObject push 0 call CreateCompatibleDC mov mDC2,eax push hBmp2 push eax call SelectObject push SRCCOPY push 0 push 0 push mDC2 push bm.bmHeight push bm.bmWidth push 0 push 0 push mDC1 call BitBlt push mDC1 call DeleteDC push mDC2 call DeleteDC W tym przykładzie kopiowana jest cała bitmapa hBmp2 w lewy górny róg bitmapy hBmp1. Opisy funkcj masz w helpie. PS: Gdyby jednak nie o to Ci chodziło to postaraj się napisać dkładnie o co Ci chodzi. Mozesz wtawić też kawałek Twojego kodu, napisać co nie działa itd. Pozdrowienia Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Chaos Napisano Październik 6, 2019 Autor Zgłoś Udostępnij Napisano Październik 6, 2019 dzieki za cierpliwosc tym razem umieszcze kawalek kodu: invoke CreateCompatibleDC ,hDC mov memDC,eax invoke SelectObject ,memDC, hBmp mov oldDC,eax invoke CreateCompatibleDC ,hDC mov memDC2,eax invoke CreateCompatibleBitmap,hDC,450,450 mov hBmp2,eax invoke SelectObject ,memDC2, hBmp2 mov oldDC2,eax invoke BitBlt ,memDC2,x,300, 48, 48, memDC,0,0, SRCCOPY invoke BitBlt ,memDC2,y,200, 48, 48, memDC,0,0, SRCCOPY invoke BitBlt ,memDC2,180,z, 48, 48, memDC,0,0, SRCCOPY invoke BitBlt,hDC,0,0,450,450,memDC2,0,0,SRCCOPY i cala sprawa sprowadza sie do tego ze chce wyswietlac kilka(nascie) bitmap w ruchu i wszystko to strasznie miga i nie wiem jak sobie z tym poradzic :? pozdrawiam Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Burn Napisano Październik 7, 2019 Zgłoś Udostępnij Napisano Październik 7, 2019 Witam! Znalazłem w internecie przykład robienia animacji. Niestety nie miałem czasu sprawdić czy działa :( ale może Cię zainteresuje: https://www.modula2.org/win32tutor/animation.php Zauważyłem że znajdują się tam wywołania funkcji SelectBitmap zdefiniowanej chyba w windowsx.h dla C++. W MASM nie ma zdefiniowanej tej funkcji ale możesz ja zastąpić funkcją SelectObject i powinno działać :) Gdyby jednak nie pomogło to się odewij może coś wymyślę. Pozdrowienia Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.