IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[Win32/MASM32] Problème : LoadIcon


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Par défaut [Win32/MASM32] Problème : LoadIcon
    Bonjour !

    Alors m'étant mis à l'ASM depuis peu, j'éprouve encore quelque petit prob ...
    J'ai copié une source trouvé sur un site de tuto, et j'ai esseyé de la modifier pour que l'icone dans le coin à gauche ( et celui dans le taskbar ) soi un de ceux que j'ai fait.

    Dans mon fichier include(.inc) j'ai :

    Dans mon .rc j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDI_ICONE               ICON      "icone.ico"
    Et un peu plus bas dans mon .asm ( tout le code est dans le même fichier ... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...  
        invoke LoadIcon,NULL,IDI_ICONE
        mov   wc.hIcon,eax
        mov   wc.hIconSm,eax
    ...
    L'icone du .exe dans l'explorer est ok, mais pas dans le coin en au à gauche ni celui du taskbar ... Je sais que en C++ on a b'soin de la macro MAKEINTRORESOURCE. mais en ASM c'est inutile non ? Menfin j'ai vu ça sur le web ...

    Merci d'avance,

    Psy³

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    vu que vous utilisez 'wc' vous passez surement par une structure WNDCLASS, le hIconSm indique de plus une structure WNDCLASSEX.

    Il faut ensuite enregistrer la structure avec un RegisterClassEx. Voilà un apercu d'une initialisation et d'un enregistrement de structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD    
    	LOCAL wc:WNDCLASSEX 
    	LOCAL msg:MSG 
     
    ;définition plus enregistrement structure
    	mov wc.cbSize,SIZEOF WNDCLASSEX 
    	mov wc.style, CS_HREDRAW or CS_VREDRAW 
    	mov wc.lpfnWndProc,OFFSET WndProc 
    	mov wc.cbClsExtra,NULL 
    	mov wc.cbWndExtra,NULL 
    	push hInstance
    	pop wc.hInstance 
    	mov wc.hbrBackground,COLOR_APPWORKSPACE 
    	mov wc.lpszMenuName,IDR_MAINMENU
    	mov wc.lpszClassName,OFFSET ClassName
    	invoke LoadIcon,NULL,IDI_APPLICATION 
    	mov wc.hIcon,eax 
    	mov wc.hIconSm,eax 
    	invoke LoadCursor,NULL,IDC_ARROW 
    	mov wc.hCursor,eax    
    	invoke RegisterClassEx, addr wc
    Essayez dans un premier temps avec IDI_APPLICATION à la place de IDI_ICONE (IDI_APPLICATION étant une constante que vous n'avez pas besion de définir et qui fera apparaitre une icon par défaut, prédéfinie dans Windows).

    Si cela fonctionne avec IDI_APPLICATION c'est que vous avez un problème avec votre icone.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Par défaut
    Non non, en fait j'ai pas précisé, mais j'utilise déjà une WNDCLASSEX

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    il manque peut être simplement une ligne comme celle-ci dans votre fichier RC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define IDI_ICONE						34

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5
    Par défaut
    Bonjour,

    le problème vient je pense du fait que vous déclarez l'icone comme un bouton, fenêtres etc. En fait c'est inutile et c'est peut-être ça qui pose problème.

    Remplacez dans le fichier ".rc" ID_ICONE par une valeur, par exemple 500, qui est souvent utilisé par défaut. Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "icone.ico"

    Dans le code il n'y a pas besoin de le déclarer car il s'agit d'une image, directement retrouvée en ressource par son numéro déclaré dans le fichier ".rc". Donc utilisez LoadIcon directement avec cette valeur:

    invoke LoadIcon,NULL,500

    Ca devrait fonctionner.

  6. #6
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Le problème vient d'une mauvaise utilisation de la fonction LoadIcon.

    Voici ce que donne Win32.hlp :

    HICON LoadIcon(
    HINSTANCE hInstance, // handle of application instance
    LPCTSTR lpIconName // icon-name string or icon resource identifier
    );

    Lors de l'appel de LoadIcon, il faut donc mettre en premier paramètre hInstance et non NULL.

    Ce paramètre hInstance se trouve à l'aide de la fonction GetModuleHandle :
    invoke GetModuleHandle, NULL
    mov h_inst,eax
    où h_inst est une variable.

    Puis on fait :
    invoke LoadIcon,h_inst,IDI_ICONE
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    et ça doit marcher ...

    Remarque : l'explorateur Windows affiche correctement l'icone parce qu'elle se trouve incorporée à l'exécutable, par l'intermédiaire du fichier de ressource.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Par défaut
    Merci Prof ça fonctionne ! Rooh j'aurais du regarder plus attentivement.

    Merci d'avoir répondu aussi rapidement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MASM32] Problème d'install à cause de 7z
    Par Booster2ooo dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 23/03/2008, 11h16
  2. [MASM32] Problème à l'édition de liens
    Par theShin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 01/03/2007, 21h38
  3. [MASM32] Problème de tableau
    Par sterepathie dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 23/12/2006, 17h53
  4. [MASM32] Problème de compilation
    Par aminexy dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 27/08/2006, 03h17
  5. [API WIN32] Double problème: DialogBox && Statusbar
    Par Ackboo dans le forum Windows
    Réponses: 9
    Dernier message: 20/08/2006, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo