Programm Icon wird verdeckt



  • Ich Lade das Icon einfach direkt wenn ich das Fenster erstelle.

    winclass.hIcon	= (HICON)LoadImage(hInstance,"ICON.ico",IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
    

    Das funktioniert auch aber das Problem ist das, das eigene Icon direkt vom Standard Windows Icon verdeckt oder überschrieben wird. Wie kann ich das verhindern? 😕

    Danke schon mal im voraus für die Hilfe



  • Das Icon muss vor der Registrierung der Fensterklasse geladen werden. Also vor deinem RegisterClass(winclass);

    Möglicherweise schlägt auch die Funktion fehl, da beim Laden aus einer datei hInstance normalerweise nicht angegeben wird.

    MSDN schrieb:

    Parameters

    hinst
    [in] Handle to an instance of the module that contains the image to be loaded. To load an OEM image, set this parameter to zero.
    lpszName
    [in]
    Specifies the image to load. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the image resource in the hinst module. If the image resource is to be loaded by name, the lpszName parameter is a pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by ordinal, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the LoadImage function.

    ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp )

    Übergib einfach mal NULL als ersten Parameter, müsste dann funktionieren (evtl. noch nen absoluten Pfad angeben).



  • Ich habe den Code jetzt geändert aber das Ergebnis bleibt dasselbe.
    Ich habe den MS Visual C++ 6.0 Compiler als Autorenversion da kommt immer wenn man
    das Programm ausführt eine MessageBox wo man seiner Rechte belehrt wird und diese hat komischer weiße das von mir erstelte Icon 😮 . Ich schätze da lauft irgendetwas falsch.
    Ich probier jetzt mal das ganze auf einem anderen Compiler zum laufen zu bringen.

    Hier nochmal der Code der ganzen Klasse

    #include "Global.h"										
    
    class C_Fenster										
    {
    public:
    
    	HWND CFenster(HINSTANCE hInstance,WNDPROC WinProc)
    	{
    
    	hIcon =(HICON)LoadImage(NULL,"ICON.ico",IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
    	if(hIcon==NULL)
    	{
    		MessageBox(NULL,"Icon konnte nicht eingelesen Werden!","",MB_OK);
    	}
    
    	WNDCLASSEX		winclass;							
    
    	winclass.cbSize				= sizeof(WNDCLASSEX);						
    	winclass.style				= CS_HREDRAW | CS_VREDRAW;			
    	winclass.lpfnWndProc		= WinProc;							
    	winclass.cbClsExtra			= 0;
    	winclass.cbWndExtra			= 0;
    	winclass.hInstance			= hInstance;						
    	winclass.hIcon				= hIcon;								
    	winclass.hCursor			= LoadCursor(NULL, IDC_ARROW);			
    	winclass.hbrBackground		= (HBRUSH)GetStockObject(BLACK_BRUSH);	
    	winclass.lpszMenuName		= NULL;								
    	winclass.lpszClassName		= "CFenster";							
    	winclass.hIconSm			= LoadIcon(NULL, IDI_APPLICATION);		
    
    	if (!RegisterClassEx(&winclass))				
    	{
    		return(NULL);
    	}
    
    	return CreateWindowEx(								
    						0,							
    						"CFenster",					
    						"Loigie's Konsole",				
    						WS_OVERLAPPEDWINDOW | WS_VISIBLE|WS_VSCROLL,
    						0,0,					
    						SCR_WIDTH,					
    						SCR_HEIGHT,				
    						NULL,					
    						NULL,							
    						hInstance,
    						NULL);			
    	};
    
    	~C_Fenster()
    	{
    		DestroyIcon(hIcon);
    	};
    
    private:
    	HICON hIcon;
    };
    


  • Du könntest auch mal das hIconSm Attribut von WNDCLASSEX auf NULL setzen. In der MSDN ist nicht so genau beschrieben, wofür das Icon ist. Das erklärt aber nicht wieso dein Icon bei der MSVC MessegaBox erscheint, sehr seltsam, vieleicht ein Fehler im Windows-IconCache?



  • Jo das war es,
    wenn man hIconSm auf Null setzt wird in meinem Fenster mein Icon angezeigt und im MeesageBox Fenster das standard Icon. 🙂
    Aber wiso das so ist würde mich schon mal interresieren naja.

    Danke für deine Hilfe


Anmelden zum Antworten