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

MFC Discussion :

Icône dans la barre de titre


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Icône dans la barre de titre
    Kikoo !
    Voilà j'ai un problème en C++ mais je sais pas si c'est un problème Win32, C++, ou Visual C++ ! Tout d'abord voici mon code source :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #include <windows.h>
    #include "resource.h"
     
    /* Définition des fonctions */
    BOOL CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    void check_keys(void);
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam);
     
     
    /* Définition des variables globales */
    ...
     
     
    /* Fonction principale */
    int WINAPI WinMain(HINSTANCE hInst,
    				   HINSTANCE hPrevInst,
    				   LPSTR lpCmdLine,
    				   int nShowCmd)
    {
     
    	return DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DlgProc);
    }
     
    /* Fonction de vérification des touches pressées */
    void check_keys()
    {
    	if(GetAsyncKeyState(VK_F8))
    		WriteProcessMemory(hand, (void*)address, &patch, sizeof(patch), NULL);
    }
     
    /* Vérification du lancement du jeu et lancement du timer */
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
    {
    	HWND hWindow; 
    	DWORD pid;
     
    	hWindow = FindWindow(NULL, title);
    	if(hWindow) 
    	{
    		GetWindowThreadProcessId(hWindow, &pid);
    		hand = OpenProcess(PROCESS_ALL_ACCESS,0,pid);
    	} 
    	else 
    	{
    		//MessageBox(NULL, "Vous devez lancer le jeu avant le trainer.", "Erreur", MB_OK + MB_ICONWARNING);
    	}
     
    	SetTimer(hDlg, 1, 0, NULL);
    }
     
    /* Gestion des messages */
    BOOL CALLBACK DlgProc(HWND hWnd,
    					  UINT msg,
    					  WPARAM wParam,
    					  LPARAM lParam)
    {
    	switch (msg) 
    	{
    		case WM_INITDIALOG:
    			InitApp(hWnd,wParam,lParam);
    			break;
     
    		case WM_COMMAND:
    			switch (LOWORD(wParam)) 
    			{
    				case IDC_ABOUT:
    					MessageBox(NULL,about,"About",MB_OK + MB_ICONINFORMATION);
    					break;
    				case IDC_QUIT:
    					EndDialog(hWnd,0);
    					break;
    			}
    			break;
     
    		case WM_TIMER:
    			check_keys();
    			break;
     
    		case WM_CLOSE:
    			EndDialog(hWnd,0);
    			break;
     
    	}
    	return FALSE;
    }
    J'ai donc créé un fichier maindialog.rc dans lesquels j'ai mis la fenêtre principale, un bmp et un ico. J'arrive à mettre le BMP correctement (en allant dans les propriétés d'un composant picture que j'ai mis sur ma feuille) mais par contre l'icône me pose problème !
    J'ai en fait nommé l'icône IDI_MAINICON, et j'aimerais l'afficher en tant qu'icône principal (afin que l'exe ait cet icône comme icône et que ce soit cet icône qui apparaisse à côté du titre quand on ouvre le programme). Mais je n'ai pas trouvé comment faire !
    De plus, lorsque je compile mon programme, l'exe a la forme de l'cône IDI_MAINICON alors que je n'ai rien dit à Visual C++ à propos de cet icône, donc pourquoi l'a-t-il pris ? Et comment le mettre dans ma barre de titre ?

    Merci pour votre aide !

    [Edit] Comme vous pouvez le constater je n'ai pas utilisé les MFC [/Edit]

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Points : 43
    Points
    43
    Par défaut
    Salut
    1/ Sache que windows prend comme icone d'exe la premiere qu'il continet et comme c'est la seule que ton exe contient...
    2/ Pour licone systeme il faut l'indiquer a Windows dans la struct WNDCLASSEX avant d'enregister ta classe de fenetre.
    a+

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Salut !!!

    Alors moi g une version stylee windows user interface :

    Il faut que tu rajoutes ca dans ont winmain juste APRES la creation de la boite de dialogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HICON hIcon1,hIcon2;
    hIcon1 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_SMALL));
    hIcon2 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_BIG));
     
    SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)hIcon1);
    SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hIcon2);
    Mais il faut d'abord que tu cree deux icones IDI_SMALL et IDI_BIG, qui apparaitront dans la barre de titres et dans le "menu" Alt-Tab.
    Il faut aussi que tu recuperes ton dalog box au lieu de faire un return, tu dois faire :

    AppWnd = DialogBox(...)

    et apres ca, le code fourni devrait te filer de belles icones super top

    Dis moi si c bon !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    adel_dz : Tu vois bien que je n'utilise pas de classe pour créer ma fenêtre ! Je ne peux donc pas le définir dans la structure WNDCLASS puisque je n'en ai pas !

    elsargento : J'ai essayé ton code mais ça ne marche pas, il m'affiche toujours l'icône Windows ! Voici mon code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #include <windows.h>
    #include "resource.h"
     
    /* Définition des fonctions */
    BOOL CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    void check_keys(void);
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam);
     
    /* Définition des variables globales */
    HANDLE hand		= NULL;
    HWND AppWnd;
    ...
     
    /* Fonction principale */
    int WINAPI WinMain(HINSTANCE hInst,
    				   HINSTANCE hPrevInst,
    				   LPSTR lpCmdLine,
    				   int nShowCmd)
    {
    	HICON hIcon1,hIcon2;
     
    	AppWnd = (HWND)DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DlgProc);
     
    	hIcon1 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAINICON)); 
    	hIcon2 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAINICON)); 
     
    	SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)hIcon1); 
    	SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hIcon2);
     
    	return (int)AppWnd;
    }
     
    /* Fonction de vérification des touches pressées */
    void check_keys()
    {
    	if(GetAsyncKeyState(VK_F8))
    		WriteProcessMemory(hand, (void*)address, &patch, sizeof(patch), NULL);
    }
     
    /* Vérification du lancement du jeu et lancement du timer */
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
    {
    	HWND hWindow; 
    	DWORD pid;
     
     
    	hWindow = FindWindow(NULL, title);
    	if(hWindow) 
    	{
    		GetWindowThreadProcessId(hWindow, &pid);
    		hand = OpenProcess(PROCESS_ALL_ACCESS,0,pid);
    	} 
    	else 
    	{
    		//MessageBox(NULL, "Vous devez lancer le jeu avant le trainer.", "Erreur", MB_OK + MB_ICONWARNING);
    	}
     
    	SetTimer(hDlg, 1, 0, NULL);
    }
     
    /* Gestion des messages */
    BOOL CALLBACK DlgProc(HWND hWnd,
    					  UINT msg,
    					  WPARAM wParam,
    					  LPARAM lParam)
    {
    	switch (msg) 
    	{
    		case WM_INITDIALOG:
    			InitApp(hWnd,wParam,lParam);
    			break;
     
    		case WM_COMMAND:
    			switch (LOWORD(wParam)) 
    			{
    				case IDC_ABOUT:
    					MessageBox(NULL,about,"About",MB_OK + MB_ICONINFORMATION);
    					break;
    				case IDC_QUIT:
    					EndDialog(hWnd,0);
    					break;
    			}
    			break;
     
    		case WM_TIMER:
    			check_keys();
    			break;
     
    		case WM_CLOSE:
    			EndDialog(hWnd,0);
    			break;
     
    	}
    	return FALSE;
    }
    Ah et mon icône je peux l'afficher en plusieurs tailles donc je sais pas s'il est grand ou petit. o_O Mais il devrait l'adapter automatiquement non ?
    Voilà j'espère que quelqu'un saura m'aider !

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Bizarre, t'as fait un debugger sur les SendMessage(WM_SETICON) ??

    Si c bon alors renvoie le code en complet parceque la ton code il me sort une floppe d'erreurs ...


  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Je t'ai uploadé le source avec les ressources et tout le reste :

    http://drugged.sephiroth.free.fr/.Trainers.rar

    J'ai essayé de debug mais j'ai rien vu de louche !
    Merci !

    [Edit]En fait je crois qu'après que j'aie fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppWnd = (HWND)DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DlgProc);
    il exécute pas la suite ![/Edit]

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Bon ben voila c t pas si dur que ca :

    Alors j'explique :
    1. Tu faisais un dialogbox ; donc ta boite etant modale, tu n'affichais en fait les icones que quand la boite etait detruite : pas top

    2. J'ai change en createdialog mais il a donc fallu creer une boucle d'attente de messages

    3. il a aussi fallu changer la facon de sortir de ta proc de gestion de messages : maintenant, ca ferme la fenetre et ensuite ca ferme le prog derriere grace aux postquitmessage

    Voila je te file le code corrige ( g pas touche aux ressources ) et dis moi si ca fonctionne chez toi !!!

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    #include <windows.h>
    #include "resource.h"
     
    /* Définition des fonctions */
    BOOL CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    void check_keys(void);
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam);
    HWND AppWnd;
     
     
    /* Définition des variables globales */
    HANDLE hand		= NULL;
    char *title		= "Command and Conquer Generals";
    char *about		= "Command and Conquer Generals 1.0 Trainer\n" \
    				"Version 1.0\n" \
    				"by Sephi\n" \
    				"sephi@countercheat.net\n\n" \
    				"Enjoy!";
     
    DWORD address	= 0x73E326;
    unsigned char patch[1]	= {0xFF};
     
     
    /* Fonction principale */
    int WINAPI WinMain(HINSTANCE hInst,
    				   HINSTANCE hPrevInst,
    				   LPSTR lpCmdLine,
    				   int nShowCmd)
    {
    	HICON hIcon1,hIcon2;
    	MSG msg;
    	int Ret;
     
    	AppWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DlgProc);
     
    	hIcon1 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAINICON)); 
    	hIcon2 = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAINICON)); 
     
    	SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)hIcon1); 
    	SendMessage(AppWnd,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hIcon2);
     
    	ShowWindow(AppWnd,nShowCmd);
     
        // Boucle principale des messages:
    	while( (Ret = GetMessage(&msg,NULL,0,0)) != 0)
    	{ 
    		if (Ret == -1) exit(0); // Grosse erreur style Fatal error
    	    else
    	    {
    			TranslateMessage(&msg); 
    			DispatchMessage(&msg); 
    		}
    	}
    	return msg.wParam;
    }
     
    /* Fonction de vérification des touches pressées */
    void check_keys()
    {
    	if(GetAsyncKeyState(VK_F8))
    		WriteProcessMemory(hand, (void*)address, &patch, sizeof(patch), NULL);
    }
     
    /* Vérification du lancement du jeu et lancement du timer */
    void InitApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
    {
    	HWND hWindow; 
    	DWORD pid;
     
    	hWindow = FindWindow(NULL, title);
    	if(hWindow) 
    	{
    		GetWindowThreadProcessId(hWindow, &pid);
    		hand = OpenProcess(PROCESS_ALL_ACCESS,0,pid);
    	} 
    	else 
    	{
    		//MessageBox(NULL, "Vous devez lancer le jeu avant le trainer.", "Erreur", MB_OK + MB_ICONWARNING);
    	}
     
    	SetTimer(hDlg, 1, 0, NULL);
    }
     
    /* Gestion des messages */
    BOOL CALLBACK DlgProc(HWND hWnd,
    					  UINT msg,
    					  WPARAM wParam,
    					  LPARAM lParam)
    {
    	switch (msg) 
    	{
    		case WM_INITDIALOG:
    			InitApp(hWnd,wParam,lParam);
    			break;
     
    		case WM_COMMAND:
    			switch (LOWORD(wParam)) 
    			{
    				case IDC_ABOUT:
    					MessageBox(NULL,about,"About",MB_OK + MB_ICONINFORMATION);
    					break;
    				case IDC_QUIT:
    					EndDialog(hWnd,wParam);
    					PostQuitMessage(0);
    					break;
    			}
    			break;
     
    		case WM_TIMER:
    			check_keys();
    			break;
     
    		case WM_QUIT:
    		case WM_CLOSE:
    			EndDialog(hWnd,wParam);
    			PostQuitMessage(0);
    			break;
     
    	}
    	return FALSE;
    }

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Super ça marche enfin !
    Merci beaucoup beaucoup !

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

Discussions similaires

  1. Mettre un icône dans la barre de titre d'une fenetre
    Par xunil2003 dans le forum Tkinter
    Réponses: 7
    Dernier message: 19/01/2015, 23h09
  2. Mettre a jour le titre de l'icône dans la barre de taches
    Par anikeh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/10/2011, 14h45
  3. Réponses: 2
    Dernier message: 20/05/2011, 13h38
  4. Placer une icône perso dans la barre de titre d'un MsgBox
    Par fred65200 dans le forum Contribuez
    Réponses: 0
    Dernier message: 06/02/2009, 20h34
  5. Ajouter une icônes dans la barre de titre
    Par fraric dans le forum Windows Forms
    Réponses: 8
    Dernier message: 11/02/2007, 21h22

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