OnPaint zeichnet zu spät
-
hallo zusammen.
habe folgendes Problem:
ich habe auf meinem dialog einige CStatic Steuerelemente, die jeweils eine bestimmte Pokerkarte hineinzeichnen.
habe daher CStatic abgeleitet und die OnPaint Methode überschrieben und an meine Bedürfnisse angepasst.
Das klappt auch alles soweit.. die karte verschwindet nicht, wenn ich den dialog minimiere oder ähnliches.
bewege ich den dialog jedoch an den linken bildschirmrand, sodass der Static-Bereich komplett verschwindet und fahre den Dialog zurück in die Mitte, ist erstmal kein Bild mehr zu sehen, solange der linkeste Pixel-Punkt nicht wieder in den Sichtbaren Bereich des Bildschirmes zu sehen ist, angezeigt wird .hoffe mir kann einer helfen, dass das Bild schon wenn der rechteste Pixelpunkt zu sehen ist.
void CStaticEXT::OnPaint() { CClientDC m_pWindowDC(this); if(m_bLoadBMPfirst) { m_bmp.LoadBitmap(IDB_PLAYCARDS); m_bmp.GetBitmap(&m_bmpInfo); m_dcMemory.CreateCompatibleDC (&m_pWindowDC); m_dcMemory.SelectObject (&m_bmp); m_bLoadBMPfirst = false; } int width = 72; int height = 97; int relx = width * 1; int rely = height * 1; //m_pWindowDC.BitBlt(10,10,72,97,&m_dcMemory,1,1,SRCCOPY); SetStretchBltMode( m_pWindowDC, HALFTONE); SetBrushOrgEx(m_pWindowDC,25,100,NULL); m_pWindowDC.StretchBlt(0,0,relx,rely,&m_dcMemory,1,1,width,height,SRCCOPY); CStatic::OnPaint(); }
-
habe das problem mittlerweile erkannt.
ich muss den Static-Bereich der Bildgröße anpassen.
-
Du machst zudem einen extremen Fehler: Du verwendest in OnPaint keinen CPaintDC! Du musst einen Paint DC verwenden, andernfalls werden die Bereiche für Windows nie aktualisiert.
-
du hast absolut recht.. danke
