Lord Napisano Wrzesień 5, 2018 Autor Zgłoś Udostępnij Napisano Wrzesień 5, 2018 Nie chcialem tego watku pisac bo wydawalo mi sie ze gdzies go widzialem ale teraz nie moge znalezc wiec pisze ;).Otoz mam problem podczas rysowania.Na kompie z mala iloscia pamieci (48 M P166) rysuje sobie cos tam na hdc.Sporo tego jest bo i jakies tla i animacje i inne duperelki wiec czeste zmienianie pena i brusha i innych rzeczy.Niby wszystkie obiekty sa zawsze usuwane,hdc zwalniane a i tak po jakims czasie system sie sypie bo zostaje mu okolo 3% pamieci RAM ;).Czy ktos wie jaki moze byc z tym problem ? Moge wyrzucic kawalek kodu gdyby komus to pomoglo.Dzieki z gory.Czesc. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Oddity Napisano Wrzesień 5, 2018 Zgłoś Udostępnij Napisano Wrzesień 5, 2018 Rzuc kodem :D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Lord Napisano Wrzesień 6, 2018 Autor Zgłoś Udostępnij Napisano Wrzesień 6, 2018 To jest program rysujacy ostroslup trojwymiarowy z mozliwoscia obracania go (tzn element rysujacy w komunikacie od timera) case WM_TIMER: { HBRUSH hbr; HRGN hrgn; HPEN pen,pioro; HDC hdc; hdc=GetDC(hWnd); hrgn=CreateRectRgn(0,0,1200,800); hbr=CreateSolidBrush(RGB(100,255,0)); SelectObject(hdc,hrgn); FillRgn(hdc,hrgn,hbr); DeleteObject(hrgn); DeleteObject(hbr); Obrot_y(tab1,3); Obrot_y(tab2,3); Obrot_y(tab3,3); Obrot_y(tab4,3); Obrot_y(tab5,3); pioro = CreatePen(PS_SOLID, 3 , RGB(0,0,200)); SelectObject(hdc,pioro); MoveTo(hdc,496,329); LineTo(hdc,498,331); LineTo(hdc,498,329); MoveTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90)); LineTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90)); LineTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90)); LineTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90)); LineTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90)); LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90)); MoveTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90)); LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90)); MoveTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90)); LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90)); MoveTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90)); LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90)); DeleteObject(pioro); pioro = CreatePen(PS_SOLID, 1 , RGB(200,0,0)); SelectObject(hdc,pioro); MoveTo(hdc,497+(tab1[0][0]*90)-(31.819805*tab1[2][0]),330+(31.819805*tab1[2][0])-(tab1[1][0]*90)); LineTo(hdc,497+(tab3[0][0]*90)-(31.819805*tab3[2][0]),330+(31.819805*tab3[2][0])-(tab3[1][0]*90)); MoveTo(hdc,497+(tab2[0][0]*90)-(31.819805*tab2[2][0]),330+(31.819805*tab2[2][0])-(tab2[1][0]*90)); LineTo(hdc,497+(tab4[0][0]*90)-(31.819805*tab4[2][0]),330+(31.819805*tab4[2][0])-(tab4[1][0]*90)); MoveTo(hdc,497+(tab0[0][0]*90)-(31.819805*tab0[2][0]),330+(31.819805*tab0[2][0])-(tab0[1][0]*90)); LineTo(hdc,497+(tab5[0][0]*90)-(31.819805*tab5[2][0]),330+(31.819805*tab5[2][0])-(tab5[1][0]*90)); DeleteObject(pioro); ReleaseDC(hWnd,hdc); break; } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Complex Napisano Wrzesień 6, 2018 Zgłoś Udostępnij Napisano Wrzesień 6, 2018 Numero uno to przenies cale rysowanie do wm_paint. Due czy jakos tak jak wybierasz cokolwiek f. SelectObject to gdy juz tego nie uzywasz przywracaj poprzedni obiekt. To jest bardzo wazne przy kasowaniu obiektu. u Ciebie jest: SelectObject(hdc,pioro); ... ... ... ... DeleteObject(pioro); W dokumentacji jest napisane jak byk: Do not delete a drawing object (pen or brush) while it is still selected into a device context. Powinno to rozwiazac Twoje problemy. pozdro Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Lord Napisano Wrzesień 7, 2018 Autor Zgłoś Udostępnij Napisano Wrzesień 7, 2018 No wlasnie chodzi o to ze to ma byc w WM_TIMER bo sie obraca co ustalona wartosc czasu a za reszte dzieki,nie doczytalem tego.Narka. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Complex Napisano Wrzesień 7, 2018 Zgłoś Udostępnij Napisano Wrzesień 7, 2018 W wm_timer dajesz InvalidateRect i samo wywoluje Ci wm_paint. 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.