Icon laden und ändern - !! HELP !!
-
Hallo,
Ich möchte in meinem Programm vom Benutzer ein Icon auswählen lassen.
Dabei kann der Benutzer zwischen 6 im Programm vorhandenen Icons wählen, oder alternativ ein eigenes Icon angeben.Ich habe diesen "Datei-Öffnen" Dialog:
CString filename; CString szFilter ="Icon Files (*.ico)|*.ico||"; CFileDialog *m_dlgFile = new CFileDialog(TRUE, NULL, "*.ico", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter); if(m_dlgFile->DoModal() == IDOK) { filename = m_dlgFile->GetPathName(); }
Nun will ich eine Art Vorschau erzeugen.
Dazu habe ich ein Picture-Element mit der Membervariable m_preview angelegt.Meine Fragen dazu:
- Wenn der Benutzer eins der vorgegebenen Icons verwendet, wird die Resource IDI_ICON_XY in ein Picture-Element geladen.
Ich weiß, wie ich ein Icon anzeige (über den Visual Studio Assistenten) aber wie mache ich das zur Laufzeit?
- Wenn der Benutzer ein eingenes Icon angibt soll dieses ebenfalls in der Vorschau angezeigt werden.
- Ich muss irgendwie prüfen, ob das Icon dem Windows-Standard entspricht, und sich als 32x32 und 16x16 darstellen lässt...Danke im voraus.
mfg
trequ
-
*Help!*
Niemand eine Idee?
-
- Wenn der Benutzer eins der vorgegebenen Icons verwendet, wird die Resource IDI_ICON_XY in ein Picture-Element geladen. Ich weiß, wie ich ein Icon anzeige (über den Visual Studio Assistenten) aber wie mache ich das zur Laufzeit?
CStatic::SetIcon
- Ich muss irgendwie prüfen, ob das Icon dem Windows-Standard entspricht, und sich als 32x32 und 16x16 darstellen lässt...
Kommt drauf an welches Attentat du dem icon vor hast.
-
Hallo,
CMatt schrieb:
- Wenn der Benutzer eins der vorgegebenen Icons verwendet, wird die Resource IDI_ICON_XY in ein Picture-Element geladen. Ich weiß, wie ich ein Icon anzeige (über den Visual Studio Assistenten) aber wie mache ich das zur Laufzeit?
CStatic::SetIcon
?? Sorry, damit kann ich als Einsteiger nix anfangen...
Wie verwende ich das?
Was ist CStatic? die Membervariable von dem Picture-Element?- Ich muss irgendwie prüfen, ob das Icon dem Windows-Standard entspricht, und sich als 32x32 und 16x16 darstellen lässt...
Kommt drauf an welches Attentat du dem icon vor hast.
Ich will das Icon für einen Wechseldatenträger festlegen.
Z.B. ein Compact-Flash Icon oder ein SmartMedia Icon anstelle des "normalen" Windows Icons für Wechseldatenträger.mfg
trequ
-
trequ schrieb:
Ich will das Icon für einen Wechseldatenträger festlegen.
Z.B. ein Compact-Flash Icon oder ein SmartMedia Icon anstelle des "normalen" Windows Icons für Wechseldatenträger.mfg
trequhallo?!?!?
uns interessiert nicht, was das icon ausdrücken/darstellen soll, sondern wie es dargestellt wird: innem listview?! innem treeview?! wenn du zB in ein treeview ein 32x32 item reinsteckst, dann wird das automatisch auf 16x16 angepasst.
warum kannst du mit [i]CStatic::SetIcon[\i] nix anfangen?! du willst es doch anzeigen?! das machste dann so...
Esco
-
Hallo,
Ich habe 5 Icons, welche als Resourcen vorhanden sind.
Zusätzlich kann der Benutzer auf "Custom Icon..." klicken und selbst eins angeben.Das ausgewählte Icon soll dann in einem Picture Control angezeigt werden.
Daher muss ich ja bei <OnSelChange> von meiner Dropdown-Liste ja schreiben:
--> Wenn Custom Icon, dann check ob Benutzer keinen Mist angegeben hat, z.B. eine 2x2 px Datei
--> Wenn Icon OK / oder Resource Icon, dann lade es in das Picture Control.Nur wie mache ich das?
Ich mache seit 3 Wochen C++ und habe mich bisher meistens mit Registry, IOCRL oder Win-API Funktion rumschlagen dürfen...mfg
trequEcso... kommt mir bekannt vor... Der Typ von www.ecso.de ???
-
Hallo,
bin jetzt weiter gekommen:
Dieser Code ändert das Icon:
HICON icon; icon = LoadIcon(NULL, "IDI_ICONCF"); icon = GetIcon(true); m_picture.SetIcon(icon);
Allerdings wird immer das MFC-Icon angezeigt, nicht das Icon in IDI_ICONCF.
Läuft da was mit LoadIcon falsch, oder wie
mfg
trequ
-
IDI_ICONCF ist eine ID kein string.
LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICONCF));
-
Hallo,
hat keine Wirkung.
Dieser Code hat genau den gleichen Fehler, wie der andere Code oben.
HICON icon; icon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICONCF)); icon = GetIcon(true); m_picture.SetIcon(icon);
Es wird immer nur das MFC-Standard Icon (IDR_MAINFRAME) gesetzt. ???
mfg
trequ
-
icon = GetIcon(true);
*hust*
-
Hallo,
dass du nicht krank wirst...
Aber irgendwie... verstehe ich es nicht:
1. GetIcon kann nur true oder false als Parameter haben. (32x32 px = true, 16x16px = false)
2. Ohne GetIcon ist m_picture leer. Das vorherige Bild ist weg, aber kein neues drin. (Wenn ich die Zeile weglasse)-->
mfg
trequ
-
HICON icon; // du lädst dein icon icon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICONCF)); // ein handle auf dein icon steht jetzt in icon // du besorgst dir das aktuelle icon deines fensters icon = GetIcon(true); // ein handle auf das aktutlle icon deines fensters steht jetzt in icon // du setzt das icon, allerdings nicht deins m_picture.SetIcon(icon);
-
Hallo,
mir ist der Fehler jetzt klar.
Ich überschreibe das Icon, indem ich GetIcon() aufrufe.
Aber wenn ich GetIcon nicht aufrufe und die Zeile auskommentiere, wird zwar das alte Icon entfernt, aber kein neues Icon dargestellt.
Und genau das verstehe ich nicht...
mfg
trequ
-
Kann mir den gar niemand sagen, wie es geht?
Ich würde das Programm heute gerne fertig machen...
Ich habe diesen Code:
HICON icon; icon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICONCF)); if(!icon){ MessageBox("Fehler beim laden des Icons"); } m_picture.SetIcon(icon);
Die MessageBox wird ausgegeben. Daher läuft offenbar was mit LoadIcon falsch.
IDI_ICONCF existiert auf jeden Fall unter Resourcen->Icon.
Ich verstehe nicht, warum es nicht geladen wird... ->[Das Icon, welches zuvor in m_picture war, ist weg, aber es wird kein neues angezeigt, sondern das Feld ist grau. Auch UpdateData (true) oder (false) bringt nix.] -> logisch, ich setzte ja auf NULL.
mfg
trequ
-
Ruf nach dem LoadIcon mal ein GetLastError auf und poste welchen Fehler-code zu zurückbekommst.
-
CMatt schrieb:
Ruf nach dem LoadIcon mal ein GetLastError auf und poste welchen Fehler-code zu zurückbekommst.
Hallo,
Error: 1813
Der angegebene Resourcentyp wurde nicht in der Image-Datei gefunden.Ich habe an stelle von IDI_ICONCF auch schon 131 probiert, das ist die Nummer aus der resource.h.
Geht auch nicht... ->mfg
trequ