Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

14.10.2015, 17:11

Hilfe zum Thema Icon setzen unter Windows

Hallo ich habe folgendes Problem und zwar lade ich mit einer Klasse namens Image Bilddaten und möchte diese gerne als Icon anzeigen lassen. Dazu verwende ich die WINAPI Struktur ICONINFO und setze deren Inhalt Manuell, dass heißt ich Konvertiere erst die Pixeldaten in eine HBITMAP und schreibe sie dann in die Struktur. Doch das Ergebnis wenn ich diese Struktur mit CreateIconIndirect in ein HICON verwandle ist ein weißes Icon mit ein paar bunten Punkten drin. Doch an der Klasse Image liegt es nicht, da ich diese schon getestet habe in dem ich die Pixeldaten als Bild gespeichert habe.


Hier nochmal der Quellcode für das Icon:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void WIN_SetWindowIcon(Image *img)
{
    ICONINFO icon;

    HBITMAP mask, pixels;

    mask = CreateBitmap(img->GetWidth(), img->GetHeight(), 1, 1, NULL);
    pixels = CreateBitmap(img->GetWidth(), img->GetHeight(), 1, 32, img->GetPixel());

    icon.fIcon = TRUE;
    icon.xHotspot = 0;
    icon.yHotspot = 0;
    icon.hbmMask = mask;
    icon.hbmColor = pixels;

    g_Icon = CreateIconIndirect(&icon);

    SetClassLong(g_window, GCL_HICON, (LONG)g_Icon);
    SetClassLong(g_window, GCL_HICONSM, (LONG)g_Icon);

    DeleteObject(mask);
    DeleteObject(pixels);
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

14.10.2015, 18:34

Habe von WinAPI keine Ahnung aber DeleteObject klingt für mich als würde dort der Kram wieder aufgeräumt. Wenn du die Pixel Maske nun aufräumst ist am Ende nichts mehr da was angezeigt werden kann. Würde ich zumindest vermuten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

14.10.2015, 18:39

Nein das DeleteObject löscht nur den Speicher der Bitmap die aber zuvor in die Icon Info Struktur kopiert wird.

4

14.10.2015, 18:45

Nein, die werden kopiert.
Sind die Pixelformate richtig?

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

14.10.2015, 18:54

Also das Pixelformat ist BGRA also das der Bitmap.

6

14.10.2015, 19:07

Ist jede Zeile an die wordgröße ausgerichtet? (https://msdn.microsoft.com/de-de/library…5(v=vs.85).aspx)
Vielleicht mal 24 bpp probieren.

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

14.10.2015, 19:12

Was meinst du genau mit Wordgröße, also die Pixeldaten habe ich in ein 1D Array geladen.

8

14.10.2015, 19:28

Bedeutet, dass jede Bildzeile an einer Adresse startet, welche durch die Wordgröße des Prozessors (32 bit, 64 bit etc) teilbar ist. Dein Problem liegt aber wahrscheinlich daran, dass du CreateCompatibleBitmap benutzen solltest für die Farbbitmap mit GetDC(0), um eine kompatible bitmap zum screen zu erstellen (vermute ich).

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

9

14.10.2015, 19:37

Ok jetzt wird das Icon schwarz.

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

10

15.10.2015, 16:44

Hat denn keiner irgendeine idee warum sich das Icon schwarz färbt, denn ich kenne mich mit der WINAPI nicht sonderlich aus und möchte doch nur aus einem Pixelarray(unsigned char) ein Icon machen welches dann auch angezeigt wird.

Werbeanzeige