Visual C++: Grafik in Bedienoberfläche einfügen

Hallo zusammen,

ich setzte mich seit ein paar Tagen mit Visual C++ auseinander und stehe jetzt irgendwie auf dem Schlauch. Ich hoffe Ihr könnt mir weiterhelfen.

Ich würde gerne in eine simple Bedienoberfläche eine Hinweisgrafik einfügen. Den „Bild“-Button in der Leiste der Steuerelemente (MS VC++ 6.0) habe ich bereits entdeckt. Wie füge ich allerdings das Bild ein, wenn ich den Typ auf Bitmap umgestellt habe? Vielen Dank für die Hilfe.

Gruß Michael

Hi Michael,

am einfachsten geht das, wenn Du Deine Hinweisgrafik als Bitmap in den Ressourcen ablegst: Also das Ressourcen-Fenster öffnen, die Sektion „Bitmap“ auswählen und Dein Bitmap erstellen oder importieren. Dem Bitmap gibst Du dann eine eindeutige ID, z.b. IDB_INFO.

Jetzt fügst Du dem Dialog ein „Bild“-Steuerelement hinzu und öffnest dessen Eigenschaften. Im Eingenschaftsfenster stellst Du unter „Allgemein“ den Typ auf „Bitmap“. Daraufhin kannst Du im Pulldownfeld „Abbild“ die ID der zur Verfügung stehenden Bitmaps auswählen. Also wählst Du unter Abbild die ID „IDB_INFO“. Und das war’s dann schon.

Gruß
Uwe

Hallo Uwe,

das hat schon mal eine Schritt weitergeholfen. Allerdings habe ich jetzt das Problem, das ich gerne Transparente Hintergründe verwenden würde. Wenn ich anstelle des BMP ein GIF verwenden will erzeugt er mir einen Fehler beim kompilieren.

Die andere Idee wäre, anstelle der BMPs Icons zu verwenden. Die 256 Farben würden mir reichen und die Größe lässt sich Benutzerdefiniert einstellen. Aber: Wie schaffe ich, das er ein abgelegtes ICON > 32x32 Pixel anzeigt. Diese Größe ist ja vorgegeben. Über „Neues Gerätebild“ kann ich eine andere Auflösung wählen. Leider wird das nicht angezeigt.

Vielen Dank

Gruß Michael

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo,

wenn Du Deine Hinweisgrafik als Bitmap in den Ressourcen ablegst - die Methode ist jedoch
auf Bitmap mit 256 Farben beschränkt.
Um das Bilder mit bessere Qualität sich zu holen verwendet man:

m_sPfadName1 = „C:\Images\Image5a.bmp“;

in der:: OnPaint() Funktion:

else:
{
CBitmap bm;
// Bimap in HBITMAP im Hintergrund laden
HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
m_sPfadName1, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);

// Ist Handle für das geladene Bild gültig?
if(hBitmap)
{
// Aktuelles Bitmap löschen -nicht gelöschte = Fehler im Ausführung!!
if(bm.DeleteObject())
// War Bitmap vorhanden, lösen
bm.Detach();
// Aktuell geladenes HBitmap mit CBitmap-Objekt verbinden
bm.Attach(hBitmap);
}

// ------------ Aufruf des Bildes
CPaintDC dc(this);
// bm.LoadBitmap(hBitmap);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&bm);
dc.BitBlt(30,10,350,178, &MemDC, 0, 0, SRCCOPY);

Mfg
Lech

Transparente Bitmaps
Hi Michael,

transparente Bitmaps sind schon etwas anspruchsvoller, das hab’ ich noch nicht selbst gemacht.

Es gibt bei Codeguru.com eine Klasse, mit der man Buttons mit transparenten Bitmaps erstellen kann. Diese Buttons sind sowieso gut geeignet, um die Oberfläche eines Programms ein wenig „aufzupeppen“. Du könntest einfach einen Button mit dem gewünschten Bitmap versehen. Die Eigenschaften der Buttons können so eingestellt werden, daß sie eigentlich nicht mehr als Buttons zu erkennen sind. Wenn der User dann trotzdem mal auf das Bitmap klickt, muß ja nichts geschehen.

Die Dokumentation der Button-Klasse ist in Englisch. Falls Du kein Englisch sprichst, kannst Du mit dem Demo-Projekt trotzdem rausfinden, wie die Sache funktioniert. Ist eigentlich ziemlich einfach zu verwenden.
Hier ist der Link:
http://codeguru.earthweb.com/buttonctrl/flat_button3…

Gruß
Uwe