Hintergrundbild an Dialoggrösse anpassen
-
Moin
ich hab folgendes Problem. Als Gimik wollte ich in einem Dialog / RicheEdit Control ein Hintergrund einblenden. Das funktioniert soweit auch ganz gut, wenn die DPI einstellung des Systems 96 dpi beträgt. bei 120 dpi ( laptop vom kolegen ) füllen die bilder nicht mehr die komplette grösse des Dialogs bzw den Hintergrund des Controls aus. Uns sieht somit bescheiden aus.
Vorgehensweise
1. Hintergrundbild als Rescource definiert (bmp)
2. Im Dialog ein IPictEditor (PictureControl) positioniert
3. Type auf Bitmap
4. als Image die definierte Rescorce ausgewähltanschliessend meine weiteren Steuerelemente darüber plaziert. Und z.B. für den RicheEdit Control Transparent auf True gesetzt.
Entwicklungsumgebung VS2008 mit 96 dpi
Wie bekomm ich es hin, das mein Bild immer über die ganze definierte grösse geht?
Wie komm ich z.B. an die gerade einstellte DPI Einstellung des Systems? z.B. um ein entsprechend grösseres Bild dynamisch einzubinden.
Oder gibt es eine möglichkeit die DPI einstellung für mein Programm auf 96 DBP zusetzen, egal was der Anwender im System gerade eingestellt hat?
Gruss Michael
-
geht es nicht in der paint methode die groesse des dialoges abzufragen und diesen wert als groesse fuer das bild zu verwenden ?
-
das liegt daran, dass dein Dialog mit DLU (Dialog Units) arbeitet, die sich an der Schriftgröße orientieren, und deine Bitmap...nunja, mit Pixelangaben

du könntest, wie schon über mir erwähnt, OnEraseBkgnd oder OnPaint nutzen, dort die Dialog Größe (in px) abfragen und die Bitmap mit StretchBlt zeichnen.
-
Moin
danke fúr die Antworten.
mit den DUs hab ich mich auch schon in die nessel gesetzt (falsche bild auflösung weitergegeben, und sich dann wundern das das bild zu klein ist)
Ich hab eine lösung bei Codeguru gefunden. tut eigentlich auch. muss mir nur ein grösseres Orginalbild besorgen, damit runtersaclirt wird. Umgekert verursacht hässliche artefacte.
http://www.codeguru.com/cpp/g-m/bitmap/article.php/c1733/
Sowas in der art hab ich mir schon fast gedacht gehabt.
gruss und danke für die antworten.
PS. ggf hilfts ja jemanden der auch die schönen 96 DPI 120 DPI Probleme hat.
-
man kann die DLU doch umrechnen lassen zu den pixeln - hab die funktion aber grad nicht im kopf
-
So
hab mein problem jetzt gelöst. für die nachwelt, ggf kanns einer brauchen.
1. ein StaticText für den Hintergrund eingebunden
2. IDC_STATIC auf z.B. IDC_BACKGROUND geändert.
3. für den IDC_BACKGROUND eine Variable angelegt
4. als Type CBitmapPicture eingetragen.5. nach Anleitung aus den Rescourcen das entsprechende bild laden (leider nur bmp)
oder über CImage ein belibiges bild laden. (jpg und png gehen da)
CImage image; CString fileName = (".\\Background.JPG"); /* Bild aus datei laden */ if(image.Load(fileName) == S_OK) { /* das HBITMAP des CImage als background übergeben */ this->m_Background.SetBitmap (image.Detach()); }gruss und danke an alle fürs mitgrübeln.
-
Muß mal deinen Weg kritisieren, da wenn man nicht aufpasst, erscheinen nach deiner Lösung eventuell Steuerelemente hinter deinem Bild, da die Steuerelemente in der reihenfolge der IDC erstellt werden. Besser ist die Bitmap direkt in den Hintergrund des Dialogs zu Zeichnen also über OnEraseBkgnd und OnPaint des Dialogs, also mit BitBlt in den Hintergrund zu Blitten.
Gruß Matthias