kill Temat założony przez niniejszego użytkownika |
[WinAPI] Poruszanie oknem-dzieckiem, a smugi na bitmapie » 2013-05-18 15:17:38 Witam, Zmagam się od paru dni z dość intrygującym mnie problemem otóż gdy tworzę okno-dziecko w głównym oknie i przesuwam je przez bitmapę z powiedzmy przeciętną prędkością to widzę jak zostaje zamalowywane poprzednie miejsce okna kolorem tła.Tzn mruga kolor ustawiony jako tło w klasie głównego okna(hbrBackground). Nie jest to wina tego jak rysuję bitmapę bo sprawdziłem to używając też kodu z kursu tj. hdc = BeginPaint( hWnd, & ps );
HBITMAP hbmObraz =( HBITMAP ) LoadImage( NULL, L"test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
HDC hdcNowy = CreateCompatibleDC( hdc ); SelectObject( hdcNowy, hbmObraz );
HBITMAP hbmOld =( HBITMAP ) SelectObject( hdcNowy, hbmObraz ); BITMAP bmInfo; GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
BitBlt( hdc, 50, 50, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY ); ReleaseDC( hWnd, hdc ); DeleteObject( hbmObraz ); SelectObject( hdc, hbmOld ); DeleteDC( hdcNowy );
Okno-dziecko niezależnie od tego czy ma titlebar czy go nie ma tak samo robi smugi. Aczkolwiek przesuwam je za pomocą(domyślnie ma nie mieć titlebaru więc jest tak przesuwane): case WM_LBUTTONDOWN: SendMessage( hWnd, WM_NCLBUTTONDOWN, HTCAPTION, NULL ); break;
Mój pomysł ogólnie jest taki czy może nie powinienem wyłączyć zamalowywanie tła i tworzyć bitmape wielkości okna, zamalować ją kolorem który ma mieć tło nastepnie wrzucać bitmapy a na końcu wrzucić całość na ekran(nie sprawdzałem jeszcze jak by to działało) czy może jest jakiś lepszy sposób? |
|
DejaVu |
» 2013-05-21 20:25:59 Ale masz problem z mruganiem czy z czym? Bo jeżeli z mruganiem to musisz zrobić sobie podwójne buforowanie. Wiem, że tyle razy ile miałem zrobić podwójne buforowanie w WinAPI na podstawie kursu dostępnego u nas na stronie, to tyle razy musiałem czytać działanie funkcji na MSDN, bo z kursu nijak nie wychodziło zaimplementowanie tego. |
|
kill Temat założony przez niniejszego użytkownika |
» 2013-05-21 22:07:51 Nie, ja mam problem z tym że jak przeciągam po mojej bitmapie(która jest w głównym oknie) okno(które jest dzieckiem głównego okna) to w czasie przeciągania zostawia ona po sobie na sekunde slad na bitmapie(ślad "gumki" tzn koloru tła głównego okna). |
|
DejaVu |
» 2013-05-21 22:39:59 Masz pewnie w Windowsie ustawioną opcję, aby okna nie odświeżały się podczas przeciągania (czy coś podobnego). Wiem, że podczas tworzenia okna można dodać jakąś dodatkową flagę, która w niektórych przypadkach poprawia odrysowywanie okna, ale niestety nie pamiętam ani nazwy flagi, ani nigdy nie dociekałem sam z siebie co tak na dobrą sprawę to poprawia. Spróbuj pokombinować w tym kierunku, albo sprawdź po prostu czy inne aplikacje (np. Word i okno opcji) zachowują się podobnie. |
|
kill Temat założony przez niniejszego użytkownika |
» 2013-05-23 17:22:47 w Wordzie wszystko dobrze jest niestety |
|
DejaVu |
» 2013-05-23 18:46:06 |
|
kill Temat założony przez niniejszego użytkownika |
» 2013-05-24 21:20:08 Gdy zastosuje WS_POPUPWINDOW czy też WM_POPUP to wszystko jest pięknie poza tym że okienko może wyjść poza program - z opisu na msdn: "The windows is a pop-up window. This style cannot be used with the WS_CHILD style." Czyli nigdy nie będzie dzieckiem głównego okna jeśli dobrze rozumiem. Nie powinno mi to przeszkadzać w zrobieniu z tego menu niby. Ale jak mówiłem, to okienko może latać wszędzie tzn poza ramami głównego programu czy jedyny sposób to samemu blokować temu oknu wychodzenie poza ramy(sprawdzać położenia okien itp) czy jednak mogę liczyć na jakąś wskazówkę albo chociaż odpowiedź czy istnieje coś co by mi ułatwiło zadanie?
PS:Dzięki za pomoc królu Julianie(król jest tylko jeden !) ;P |
|
DejaVu |
» 2013-05-30 14:02:45 Rozwiązałeś problem? Można zamknąć temat? Jak problem rozwiązałeś? Do jakich wniosków doszedłeś? |
|
« 1 » |