Icon aus externer DLL Laden?
-
Hi.
Da ich es nicht hinbekomme ein Bild anzuzeigen wollte ich mal fragen, ob es an meinem Code zum darstellen liegt - oder am code zum laden.
Das meiste ist noch 'vorbereitungscode' dafuer, wie es mal arbeiten soll (das sprintf) und die ID 123 gibt es auf jeden Fall in der DLL. Das Problem ist, dass der Compiler nicht meckert und das Programm ebensowenig was von sich gibt, wenn die datei 'res.dll' nicht existiert...Code zum Laden:
HINSTANCE hClientResources = AfxGetResourceHandle(); AfxSetResourceHandle(::GetModuleHandle("res.dll")); AfxSetResourceHandle(hClientResources); char tmp[50] = ""; sprintf(tmp,"%s%s","ICONRES_","DUMMY"); HICON hIcon = LoadIcon(hClientResources, MAKEINTRESOURCE(123));Code zum darstellen:
m_TestButton.ModifyStyle( 0, BS_ICON ); m_TestButton.SetIcon(hIcon);
-
Äh. Du musst schon res.dll erstmal laden.
Und wenn du LoadIcon so verwendest brauchst du AfxSetResourceHandle garnicht, ganz abgesehen davon dass es so wie du es verwendest keinen Sinn macht.Guck dir LoadLibrary an. GetModuleHandle funktioniert nur mit DLLs die bereits geladen sind.
-
OK danke - das hat schonmal prima weitergeholfen :0)
HINSTANCE hDll = NULL; hDll = LoadLibrary(TEXT("res.dll")); if (!hDll) WriteConsoleString("DLL Nicht geladen"); WriteConsoleString("DLL geladen"); HICON hIcon; char tmp[20] = "ICONRES_DUMMY"; hIcon = LoadIcon(hDll, MAKEINTRESOURCE("123")); m_Rconf.ModifyStyle( 0, BS_ICON ); m_Rconf.SetIcon(hIcon); FreeLibrary(hDll);Funktioniert wunderbar :0)
-
Hey,
kann man dieses Icon dann auch irgendwie als Standardicon für die Anwendung setzen?
-
Sorry, keine Ahnung ob oder wie das geht :0/
-
Wenn Du nur das Icon willst: ExtractIcon(Ex)
Was verstehst Du unter "Standard-Icon"? Das was im Explorer angezeigt wird? Oder das, was im Fenster oben links erscheint.
Das wa sim Explorer angezeigt wird ist das erste Icon in der EXE. Somit kannst Du kein Externen Icon hier verwenden (das geht nur bei "Verknüpfungen").Ansonsten "WM_SETICON"
-
Hallo Jochen,
ich meinte das Programmicon das ich im EXplorer sehe, genau!
Gut, da gibt es also keine Chance, sehe ich auch ein.
Aber ist es nicht genau das gleiche Icon, welches ich standardmäßig
in meiner Anwendung oben links in der Ecke anzeige?
-
Das Icon welches im explorer angezeigt wird kann man natürlich nicht mit dem Programm verändern, da es ja nicht läuft - der Explorer macht bloss das File auf und nimmt sich da das erste Icon raus.
Und das Icon welches im Fenster links oben angezeigt wird muss nicht unbedingt das erste im File sein, das wird ja bei RegisterClass mit angegeben, kann also auch das 100. Icon im File sein oder von ganz woanders her stammen.
-
Oder man definiert es selbst mit WM_SETICON!
-
Martin Richter schrieb:
Oder man definiert es selbst mit WM_SETICON!
Sag ich doch
