Bild in ein Frame einer MDI Anwendung laden !
-
Guck dir mal CBitmap::GetBitmap an. Da kannst du die Größe in Pixeln erfragen.
Hilft das? (Sorry, bin da totale Theoretikerin.)
-
Mal sehen ob es was hilft ! Doch irgendwie komme ich net klar mit diesen Strukturen, kannst du mir ein bisschen helfen ?
Ist das richtig :
int Width; int Height; tagBITMAP bm; bm.bmWidth = Width, bm.bmHeight = Height; CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp||"); if(dlg.DoModal() == TRUE) { CBitmap bitmap; CDC dc; CDC* pDC = GetDC(); HBITMAP hPixel = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), dlg.GetFileName(), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); bitmap.Attach(hPixel); bitmap.GetBitmap(&bm); dc.CreateCompatibleDC(pDC); dc.SelectObject(&bitmap); pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); }Danke
-
Das scheint die falsche Reihenfolge zu sein.
tagBITMAP bm = new BITMAP;/*wenns nicht geht: irgendwas mit sizeof(BITMAP)*/; CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp||"); if(dlg.DoModal() == TRUE) { CBitmap bitmap; CDC dc; CDC* pDC = GetDC(); HBITMAP hPixel = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), dlg.GetFileName(), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); bitmap.Attach(hPixel); bitmap.GetBitmap(&bm); bm.bmWidth // hier steht die breite drin bm.bmHeight // und hier die Höhe. // Jetzt musst du noch das Fenster an sich dazurechnen und kannst dann MoveWindow versuchen. dc.CreateCompatibleDC(pDC); dc.SelectObject(&bitmap); pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); }Edit: Hab noch einen Fehler gefunden: Du musst Speicher reservieren. Da ich aber nicht ausprobieren kann und da auch nicht so firm bin musst du wissen wie das geht.

-
Da hätte ich aber noch eine kleine Frage. Wie soll ich denn jetzt bm.bmWidth und bm.bmHeight benutzen ??? Wenn ich jetzt die Größe der ChildWindows mit SetWindowPos ändern möchte, dann kann ich ja nicht SetWindowPos(NULL,0,0, bm.bmWidth, bm.bmHeight, NULL); schreiben !

-
Also, ich würde MoveWindow nehmen, das macht auch das was du brauchst, hat aber weniger Parameter.
Wenn du das mit den Werten machst, die du bekommst ist das Fenster zu klein. In der Breite musst du noch den Rahmen dazurechnen und in der Höhe auch noch die Titelleiste und das Menü. Mag sein, dass ich was vergessen hab, war aus dem Kopf.
Dafür hab ich dir ja ::GetSystemMetrics empfohlen, guck dir das mal genau an.
PS: Nächste Antwort morgen früh.

-
Also, Jetzt habe ich MoveWindow verwendet. Er setzt die Maße für das ChildFrame genau so groß wie das Bild ist ! Doch das Problem ist, dass er das Bild jetzt nicht mehr in das Frame lädt !
Hier nochmals mein Code :CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp||"); if(dlg.DoModal() == TRUE) { CBitmap bitmap; tagBITMAP bm; CDC dc; CDC* pDC = GetDC(); HBITMAP hPixel = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), dlg.GetFileName(), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); bitmap.Attach(hPixel); bitmap.GetBitmap(&bm); bm.bmWidth, bm.bmHeight; dc.CreateCompatibleDC(pDC); dc.SelectObject(&bitmap); pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); GetParent()->MoveWindow(0,0,bm.bmWidth, bm.bmHeight, TRUE); }Habe ich mal wieder irgendwas vergessen oder MoveWindow falsch benutzt ???

Danke
-
bitmap.GetBitmap(&bm); bm.bmWidth, // Das steht doch nicht wirklich da, oder? bm.bmHeight; // Da hast du doch was nicht mitkopiert... // Schonmal HIER das MoveWindow versucht? dc.CreateCompatibleDC(pDC); dc.SelectObject(&bitmap); pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); GetParent()->MoveWindow(0,0,bm.bmWidth, bm.bmHeight, TRUE);Ich hoffe es geht jetzt, mittlerweile bin ich echt ratlos.

-
Also, nach der tagBitmap Struktur das MoveWindow zu setzen, habe ich schon versucht, hat aber net funktioniert. Er setzt immer nur das ChildFrame auf die Größe des Bildes, aber das Bild selbst setzt er nicht ! Ich denke es liegt daran, dass ich das Bild nicht neu Zeichnen lasse.
Naja, dann werde ich mal versuchen das Bild immer wieder neu zu zeichnen !
Danke für deine Hilfe !:: NoName ::
-
Sollte man das in OnSize nicht sowieso machen?

-
hmmm, ich habe mal in meinen Büchern gewälltzt, da wirds mit CMeatFileDC gemacht !
Werde ich schon irgendwie hinkriegen !
Gruß
:: NoName ::