Problème image list : undefined reference to _imageList_Create@20

Signaler
Messages postés
23
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
1 février 2010
-
Messages postés
23
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
1 février 2010
-
j'ai un souci avec ma fonction image list, comme le dis le sujet lors
de la compilation j'ai le message suivant: undefined reference to
_imageList_Create@20 , j'ai due oublier quelque chose mais je ne vois
pas quoi, voilà mon code :


int CreateImageList()

{

  HIMAGELIST hImageList;    /* Handle sur la imagelist                        */

  int nResult;


  nResult = 0;


  /* Création de la liste */

  hImageList = ImageList_Create(GetSystemMetrics(SM_CXICON),

                                GetSystemMetrics(SM_CYICON),

                                ILC_MASK, 1, 1);

  if (! hImageList) goto the_end;


  /* Ajout d'un icône */

  if (ImageList_ReplaceIcon(hImageList, -1, LoadIcon(NULL, IDI_APPLICATION)) == -1) goto the_end;


  /* Affectation de la imagelist à la listview */

  SendMessage(_hListView, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)hImageList);


  nResult = 1;

the_end:

  return nResult;

}


/**

 * Crée les items de la listview

 */

void InitListView(HWND hwnd,char *text)

{

  LV_ITEM lvi;


  /* Initialisation des items */

  {

  lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;

  lvi.state = 0;

  lvi.cchTextMax = strlen(text);

  lvi.pszText = text;

  lvi.iImage = 0;

  lvi.iItem = 0;

  lvi.iSubItem = 0;

  }


  ListView_InsertItem(hwnd,&lvi);


return 0 ;

}

2 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
C'est une question typique où tu gagnerais du temps à regarder directement sur MSDN qui donne en bas de page de chaque fonction header et lib requis.

Minimum DLL Version comctl32.dll
Header commctrl.h
Import library comctl32.lib

ciao...
BruNews, MVP VC++
Messages postés
23
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
1 février 2010

merci pour la réponse j'ai bien rajouté #pragma comment(lib,"comctl32"); mais le souci persiste je poste mon code si ça peut aider:

#ifdef UNICODE
#define _UNICODE
#endif /* UNICODE */

/* Requis pour LVN_GETINFOTIP */
#define _WIN32_IE 0x0400

#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#pragma comment(lib,"comctl32")
/*variables, Handles */
HINSTANCE _hThisInstance;
HWND _hWnd;
HWND _hListView;
LPTSTR _lpAppName = _T("mon programme");
DWORD _nStatusBarHeight;

/*traitement des messages*/
int CALLBACK windowsprocedure(HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
  /*Info sur les tailles min et max de la fenêtre*/
  MINMAXINFO *lpMinMaxInfo;

  /*Taille de la zone cliente*/
  RECT clientRect;

  /*retour de la fonction*/
  long nResult;
  nResult = 0;

  /*Pour savoir si le message est traité*/
  int bHandled;
  bHandled = 0;

   switch (nMsg)
  {
    case WM_GETMINMAXINFO:
      lpMinMaxInfo = (MINMAXINFO*)lParam;
      lpMinMaxInfo->ptMinTrackSize.x = 300;
      lpMinMaxInfo->ptMinTrackSize.y = 200;
      bHandled = 1;
      break;

      /* On ajuste la taille de la listview */
      GetClientRect(_hWnd, &clientRect);
      SetWindowPos(_hListView, 0, 0, 0,
                   clientRect.right - clientRect.left,
                   clientRect.bottom - clientRect.top - _nStatusBarHeight,
                   SWP_NOMOVE | SWP_NOZORDER);
    break;

    /*affichage de la notification*/
    LPNMLVGETINFOTIP nmInfoTip;
    case WM_NOTIFY:
    if (((NMHDR*)lParam)->code == LVN_GETINFOTIP);
    {
    nmInfoTip = (LPNMLVGETINFOTIP)lParam;
    MessageBox(_hWnd, nmInfoTip->pszText, "informations disponibles", MB_OK);
    }
   break;

   case WM_DESTROY:
      /* On signale que le thread va s'arrêter */
      PostQuitMessage(0);
      bHandled = 1;
   break;

 }

  if (! bHandled)
    nResult = DefWindowProc(hwnd, nMsg, wParam, lParam);
  return nResult;
}

int CreateImageList()
{
  HIMAGELIST hImageList;    /* Handle sur la imagelist                        */
  int nResult;

  nResult = 0;

  /* Création de la liste */
  hImageList = ImageList_Create(GetSystemMetrics(SM_CXICON),
                                GetSystemMetrics(SM_CYICON),
                                ILC_MASK, 1, 1);
  if (! hImageList) goto the_end;

  /* Ajout d'un icône */
  if (ImageList_ReplaceIcon(hImageList, -1, LoadIcon(NULL, IDI_APPLICATION)) == -1) goto the_end;

  /* Affectation de la imagelist à la listview */
  SendMessage(_hListView, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)hImageList);

  nResult = 1;
the_end:
  return nResult;
}

/**
 * Crée les items de la listview
 */
void InitListView(HWND hwnd,char *text)
{
  LV_ITEM lvi;

  /* Initialisation des items */
  {
  lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
  lvi.state = 0;
  lvi.cchTextMax = strlen(text);
  lvi.pszText = text;
  lvi.iImage = 0;
  lvi.iItem = 0;
  lvi.iSubItem = 0;
  }

  ListView_InsertItem(hwnd,&lvi);

return;
}

/*ajout de la listview*/
int CreateListView()
{
_hListView = CreateWindowEx(0, WC_LISTVIEW, (LPCTSTR)NULL,WS_CHILD | LVS_ICON | WS_VISIBLE,0, 0, 0, 0,_hWnd, NULL, _hThisInstance, NULL);
if (! _hListView) goto the_end;

/*handle pour les tooltips*/
HWND hTips;

/*envoie des message lors du survol des items */
SendMessage(_hListView, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_INFOTIP, LVS_EX_INFOTIP);

/* Pour que WM_NOTIFY arrivent instantanément lors du survol d'un item */
hTips = (HWND)SendMessage(_hListView, LVM_GETTOOLTIPS, 0, 0);
SendMessage(hTips, TTM_SETDELAYTIME, TTDT_INITIAL, 1);
SendMessage(hTips, TTM_SETDELAYTIME, TTDT_RESHOW, 1);

  the_end :
  return 0 ;
}

/**
 * Initialise la fenêtre principale de l'appli.
 */
int CreateMyWindow()
{
  WNDCLASSEX wincl;       /* Classe de la fenêtre utilisée                    */
  int nResult;

  nResult = 0;

  /* Création de la classe de fenêtre */
  wincl.cbSize = sizeof(WNDCLASSEX);
  wincl.style = 0;
  wincl.lpfnWndProc = 0;
  wincl.cbClsExtra = 0;
  wincl.cbWndExtra = 0;
  wincl.hInstance = _hThisInstance;
  wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
  wincl.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
  wincl.lpszMenuName = 0;
  wincl.lpszClassName = _lpAppName;
  wincl.hIconSm = NULL;

  /* Enregistrement de la classe */
  if (! RegisterClassEx(&wincl)) goto the_end;

  /* Création de la fenêtre */
  _hWnd = CreateWindowEx(0, _lpAppName, _lpAppName,
                         WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT, CW_USEDEFAULT, 500, 300,
                         HWND_DESKTOP, NULL, _hThisInstance, NULL);
  if (! _hWnd) goto the_end;

   /* Création de la listview */
  if (! CreateListView()) goto the_end;

  /* Affichage de la fenêtre */
  ShowWindow (_hWnd, SW_SHOW);

  nResult = 1;
the_end:
  return nResult;
}

/**
 * Main
 */
int __cdecl WinMainCRTStartup()
{
  MSG messages;                       /* Messages envoyés à l'application     */
  INITCOMMONCONTROLSEX initCommon;    /* Initialisation de comctl32           */
  int nResult;

  initCommon.dwSize = sizeof(initCommon);
  initCommon.dwICC = ICC_BAR_CLASSES | ICC_LISTVIEW_CLASSES;
  InitCommonControlsEx(&initCommon);

  /* Récupération du handle du module */
  _hThisInstance = GetModuleHandle(NULL);

  /* Boucle de traitement des messages */
  while (GetMessage(&messages, NULL, 0, 0))
  {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
  }
  nResult = messages.wParam;

the_end:
  /* ExitProcess nécessaire car sinon c'est un ExitThread */

  ExitProcess(nResult);

  /* Pour esquiver le warning */
  return 0;
}