?
Ok
ich versuche es mal zu präzisieren:
Sobald die Funktion OnMouseMove ausgeführt wird, mache ich folgendes:
Ich lade ein Bitmap aus einer Datei:
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,m_sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
CBitmap pCBmp = CBitmap::FromHandle(hBitmap);
Dieses Bild lade ich dann in einen Speicher-DC:
CDC *pDC1 = this->GetDC();
CDC *dcMem = new CDC;
dcMem->CreateCompatibleDC(pDC1);
dcMem->SelectObject(pCBmp);
In diesen DC mal ich nun ein Rechteck:
dcMem->SelectStockObject(NULL_BRUSH);
CPen lPen(PS_SOLID, 1, RGB(255, 0, 0));
dcMem->SelectObject(&lPen);
dcMem->Rectangle(Rechteck) //CRect Rechteck wird vorher anhand der Mausposition bestimmt)
Anschließen kopiere ich den Speicher DC:
pDC1->BitBlt(0, 0,Picture.Width(),Picture.Height(),dcMem, 0, 0,SRCCOPY);
Wenn ich nun die Maus bewege, dann verändert sich das Rechteck so wie es soll. Das Problem ist, dass das ganz wirlich extrem langsam ist.
Ich denke mal, das liegt daran, dass ständig das Bild neu aus der Datei geladen wird. Also habe ich versucht, das Bild in der OnInitDialog zu laden. Dann geht zwar alles schneller, allerdings werden dann die alten Rechtecke nicht mehr gelöscht.
Gibt es eine Möglichkeit, das Bild irgendwie in den Speicher zu lesen, so dass ich bei jedem neuen Durchgang der OnMouseMove das original-Bild zur Verfügung habe und dann darauf "frisch" zeichnen kann ?