Comment afficher un icone dans la caption d'une boite de dialog

Signaler
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
bonjour
comment afficher un icone dans la caption d'une boite de dialogue?
j'y arrive dans la fenêtre seulement
merci d'avance
le code:
#include <windows.h>


#include "resource.h"


DIALOG1 DIALOG
   60, 60, 320, 80
          STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
              CAPTION "Veuillez patienter chargement des textures"
             
BEGIN
    DEFPUSHBUTTON "Progress", IDOK, 56, 55, 42, 12
    ICON            "BATMAN",IDC_STATIC,10,53,21,20
    CTEXT           "???????????????????????????",IDC_STATIC,7,40,166,8
           
    CONTROL "", IDE_PB1, PROGRESS_CLASS, 0 ,10, 20, 300, 12
END
//////////////////////////////////////////////
BATMAN                  ICON    DISCARDABLE     "Batman 3.ico"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main.cpp
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                  LPSTR lpCmdLine, int nCmdShow)
{
       InitCommonControls();
       DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)DlgProc);
       return 0;
}
/******************************************************************************/
 
BOOL APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
      case WM_INITDIALOG:
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETRANGE, 0, MAKELONG(0,40));
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETSTEP, 1, 0);
         return TRUE;


      case WM_COMMAND:
         if (LOWORD(wParam) == IDOK)
              {
                   SendDlgItemMessage(hDlg, IDE_PB1, PBM_STEPIT, 0, 0);
                   return TRUE;
              }
         if (LOWORD(wParam) == IDCANCEL)
              {
                   EndDialog(hDlg,0);
                   return TRUE;
              }
      default:
         return FALSE;
    }
}

9 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
SetClassLongPtr(hdlg, GCLP_HICON, (long)LoadIcon(hinst, MAKEINTRESOURCE(IDI_APP)));

ciao...
BruNews, MVP VC++
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
OU


SendMessage((HWND)hDlg, WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)(HICON)hIcon);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
C'est une autre possibilité.
SetClassLong, à n'appeler qu'1 fois en debut de prog) permet d'avoir aussi les MessageBox avec la meme icone.

ciao...
BruNews, MVP VC++
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                  LPSTR lpCmdLine, int nCmdShow)
{
       InitCommonControls();
       DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)DlgProc);
       SetClassLongPtr(hDlg, GCLP_HICON, (long)LoadIcon(hInstance,
         MAKEINTRESOURCE(IDI_APP)));
      
       return 0;
}
j'avoue que je suis nul en la matière ,j'ai essayé cela mais il y a une erreur "IDI_APP undeclared"
il faut le déclarer où et comment?
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
WM_INITDIALOG !!!   (dans DLGPROC)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Commence par Petzold sinon on est très mal:
http://brunews.com/brunews/download/CP5.zip
http://brunews.com/brunews/download/CP5Sources.zip

doit aller dans WM_INITDTALOG, tout de même évident.

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
j'en ai tapé comme un branquignole du coup, agrrrrr

merci yann

ciao...
BruNews, MVP VC++
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Et surtout il n'est pas dit que IDI_APP soit l'id de TON icon...
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
En attendant que tu lises ces tuto, voila de quoi répondre a ta question :

BOOL APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
      case WM_INITDIALOG:
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETRANGE, 0, MAKELONG(0,40));
         SendDlgItemMessage(hDlg, IDE_PB1, PBM_SETSTEP, 1, 0);
         SetClassLongPtr(hDlg, GCLP_HICON, (long)LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICONMAIN)));
         return TRUE;      

      case WM_COMMAND:
         if (LOWORD(wParam) == IDOK)
              {
                   SendDlgItemMessage(hDlg, IDE_PB1, PBM_STEPIT, 0, 0);
                   return TRUE;
              }
         if (LOWORD(wParam) == IDCANCEL)
              {
                   EndDialog(hDlg,0);
                   return TRUE;
              }
      default:
         return FALSE;
    }
}

Il faut donc que tu rajoutes un icone dans ton fichier de ressource que tu appelleras IDI_ICONMAIN.

Shell