Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Poruszanie oknem-dzieckiem, a smugi na bitmapie

Ostatnio zmodyfikowano 2013-05-30 14:02
Autor Wiadomość
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.
C/C++
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 ); // kasowanie bitmapy
SelectObject( hdc, hbmOld );
DeleteDC( hdcNowy ); // usuń kontekst razem z jego domyślną bitmapą

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):
C/C++
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?
P-83228
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.
P-83543
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).
P-83562
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.
P-83565
kill
Temat założony przez niniejszego użytkownika
» 2013-05-23 17:22:47
w Wordzie wszystko dobrze jest niestety
P-83713
DejaVu
» 2013-05-23 18:46:06
To poszukaj tej dodatkowej flagi podawanej przy funkcji CreateWindow.
Frazy, które należy wpisać w wyszukiwarkę google:

Może coś w tym znjdziesz:
http://go4answers.webhost4life.com/Example/win32-redrawing-issues-while-moving-66335.aspx
P-83725
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
P-83816
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ś?
P-84332
« 1 »
  Strona 1 z 1