HICON Parameter

CodeFatal

Erfahrenes Mitglied
Hi @ all,

habe mir die CButton Klasse der MFC vererbt. Der "Erbe" wird auch richtig angezeigt mit allem Zeugs, was ich so haben will. Als neustes habe ich Icon's ermöglicht.
Diese werden ebenfalls angezeigt. Jetzt kommt aber das Problem. Ich kann die Teile zeichnen wo ich will nur die Berechnung fürs zentrieren nicht, da ich nicht an die Breite/Höhe des Icon's komme -> wo bekommt man die her? Mir ist zwar momentan bekannt wie Breit die sind (hab ja selbst gemalt :) ), aber das wird in Zukunft nicht mehr so sein. Will mich also auf keine Grösse festlegen. Gibt es irgendwie ne Funktion CalcRect oder so für die Teile?

Danke schon mal

Gruß

Michael
 
Müsste so gehen:

Code:
ICONINFO iconinfo;

if( GetIconInfo(hIcon, &iconinfo) )
{
    BITMAP bitmap;
    
    if( GetObject(inconinfo.hbmColor, sizeof(bitmap), &bitmap) )
    {
        // bitmap.bmWidth enthält die Breite
        // bitmap.bmHeight enthält die Höhe
    }
}
 
Achtung noch:

Die Funktion GetIconInfo erzeugt zwei Bitmaps (die du in der Struktur übergeben bekommst). Du musst die selbst zerstören!
 
Danke für die Anmerkung. Hab da natürlich nicht drauf geachtet :) Vielleicht hilft es ja potentiellen Nachfolgern. Schönen Abend noch allen
 
Oops, das Aufräumen vergessen, danke Endurion. Das kommt davon, wenn man den Code mal eben schnell "aus dem Bauch heraus" aufschreibt ;-)
 
Hi @all und frich und munter in die neue Woche gestartet...

Leider nicht ganz. Eure Anmerkung von wegen Speicher frei geben hab ich inzwischen auch in den MSDN gefunden - Wer lesen kann ist klar im Vorteil - nur leider klappt das nicht. Habt ihr vielleicht ne Lösung. Entweder seh ich den Wald vor lauter Bäumen nicht oder ich hab da irgendwas grundsätzlich falsch verstanden...
Hab mal folgendes aus eurem Beispiel gemacht:
Code:
ICONINFO iconinfo;
if( GetIconInfo(hIcon, &iconinfo) )
{
	BITMAP bitmap;
	
	if( GetObject(iconinfo.hbmColor, sizeof(bitmap), &bitmap) )
	{
		*pWidth = (int)bitmap.bmWidth;
		*pHeight = (int)bitmap.bmHeight;	
				
		//Von iconinfo angelegten Speicher wieder frei geben
		delete iconinfo.hbmColor;
		delete iconinfo.hbmMask;

		return TRUE;
	}
	//Von iconinfo angelegten Speicher wieder frei geben
	delete iconinfo.hbmColor;
	delete iconinfo.hbmMask;
}
Danke schon mal für eure Mühen.
Gruss Michael
 
Nach eifrigem googeln hab ich folgendes gefunden :)
Code:
DeleteObject(iconinfo.hbmColor);
DeleteObject(iconinfo.hbmMask);
Das löst phänotypisch mein Problem aber ist das auch das richtige?

Gruss
 
Besten Dank für die schnelle Antwort.

Hoffe, ich geh nicht zu sehr auf die Nerven mit meinen blöden Fragen.

Gruss Michael
 
Zurück