Lupenfenster erstellen
-
Hallo
Ich schreibe grad ein Programm zur Bildbetrachtung mit MFC und will eine Lupe einbinden. Der User soll über einem Bild eine Mousetaste gedrückt halten und es blendet sich die Lupe ein, die das Bild partiell vergrößert und die verschiebbar ist. Beim loslassen der Mousetaste verschwindet die Lupe.
Da eine Lupe ja rund ist soll auch mein Lupenfenster rund werden, worin mein Problem besteht. Wie kriege ich ein rundes Fenster hin?
Ich habe meine Lupenklasse von CWnd abgeleitet und als WS_POPUP createt. Dann habe ich eine runde CRgn erstellt, die ich in der OnPaint()-Methode mit dem vergrößerten Bildausschnitt füllen will. Das klappt auch alles gut nur updatet sich der Hintergrund, quasi der Rest des eckigen Fensters, nicht mit dem Inhalt des darunterliegenden Fensters wenn ich die Lupe verschiebe.Der Hintergrund bleibt immer gleich.Ich dachte mir, ich könnte eine zweite Region erstellen, die das "Restfenster" beinhaltet und diese dann in der OnEraseBkgnd()-Methode füllen, nur weiss ich nicht wie ich die Region mit dem darunter liegenden Inhalt füllen soll.
Hat irgendjemand eine Idee wie das geht, oder gibt es vielleicht einen Style beim Create der mir die Arbeit abnimmt? Ich hab auch schon mit den verschiedenen Flags beim SetWindowPos() (fürs Fensterverschieben) experimentiert, aber bis jetzt ohne Erfolg.
Vielen Dank im Voraus und Gruß
Andi
-
Hab das mal gemacht mit nem Dialog, sollte aber gleich sein
void CGeburtstagDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CRgn rgn,rgn1,Trgn; rgn.CreateRoundRectRgn(0,0,cx,cy,20,20); POINT p[8]; p[0].x = 0; p[0].y = cy; p[1].x = cx; p[1].y = cy; p[2].x = cx; p[2].y = cy-35; p[3].x = cx-5; p[3].y = cy-35; p[4].x = cx-20; p[4].y = cy; p[5].x = 165; p[5].y = cy; p[6].x = 180; p[6].y = cy-35; p[7].x = 0; p[7].y = cy-35; rgn1.CreatePolygonRgn(p,8,ALTERNATE); Trgn.CreateRectRgn(0,0,1,1); Trgn.CombineRgn(&rgn,&rgn1,RGN_DIFF); SetWindowRgn(Trgn,TRUE); }Hab mal einfach den Ausschnitt aus meinen Code genommen. Sollte nicht schwer sein das auf deine Sache umzusetzen. Viel Erfolg
Gruß Matthias
-
vielen Dank für die Antwort. Hab es mittlerweile auch hinbekommen.Ich benötige nur eine Region, da es ja lediglich rund werden soll.
Mir fehlte nur das SetWindowRgn() in meinem Code. Danach lief es so wie ich wollte.viele Grüße
Andi