begin process at 2012 02 12 04:44:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Base de données

 > 

Autre

 > 

curseur sur icone


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

curseur sur icone

samedi 11 avril 2009 à 19:01:23 | curseur sur icone

juju116

bonjour je cherche a savoir si quelqu'un peut m'aider, j'aimerais savoir sur quel dossier, fichier ou icone je me trouve lorsque je passe ma souris dessus.si quelqu'un à un code pour m'aider je suis vraiment un debutant et j'ai du mal sur l'air de microsoft^^.
merci beaucoup
samedi 11 avril 2009 à 21:18:29 | Re : curseur sur icone

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Savoir sur quel fichier passe le curseur dans l'explorateur windows ? Tendu... Tu as WindowFromPoint  ou des fonctions similaires qui peut peut être t'aider... Espionner ce qui se passe avec spy++ peut éventuellement te donner plus d'infos. Mais même pas sûr.

Bon courage.
dimanche 12 avril 2009 à 07:48:11 | Re : curseur sur icone

Miquel75

Ca n'a pas de rapport avec WindowFromPoint ..
Un fichier ou une icône, c'est un objet, pas une fenêtre !
Ca se fait depuis des lustres avec les Win32 MA Apis. Très simple (MS)
dimanche 12 avril 2009 à 09:12:37 | Re : curseur sur icone

rt15

Membre Club Administrateur CodeS-SourceS
Miquel -> "MA" ? Et tu peux être à peine plus précis ?

juju -> En attendant la solution de Miquel, mieux que WindowFromPoint, tu dois pouvoir utiliser les messages. Regarde du côté de LVS_EX_INFOTIP. Exemple ici et .
dimanche 12 avril 2009 à 10:38:34 | Re : curseur sur icone

juju116

apparemment il fudrait que j'utilise la list view ça aide deja de trouver des infos ^^ reste à savoir comment l'utiliser surtout que msdn c'est de l'anglais et je comprend pas vraiment bien comment cette fonction marche.
dimanche 12 avril 2009 à 15:23:42 | Re : curseur sur icone

juju116

bon si j'ai bien compris dans mon programme je dois créer une listview ,et je devrais mettre en place des info tips à afficher en fonction de l'itelm sur lequel est positioné mon curseur de souris. sur le site de la msdn ou tu m'as envoyé jé vu la notification LVN_GETINFOTIP. reste plus qu'a comprendre comment marche tout ça ça reste tendu pour moi^^list view je ne connais pas du tout et vu kque je suis un vrais debutant en api win 32 lol
mardi 14 avril 2009 à 19:20:05 | Re : curseur sur icone

rt15

Membre Club Administrateur CodeS-SourceS
Ah en fait tu veux savoir sur quel icône ta souris se trouve, mais dans ta propre application ? Bin c'est un peu plus simple d'un coup.

Le code suivant affiche dans la barre de status le texte de l'item d'une listview.
Bon ça marche bien pour ce qui est d'afficher le curseur quand celui-ci arrive sur l'item. Par contre, pour effacer le texte quand on quitte l'item, je vois pas comment faire...

Nécessite kernel32.lib, user32.lib et comctl32.lib en entrée du lieur. Pour compiler sous gcc, ajouter -nostartfiles -nodefaultlibs -nostdlib -ffreestanding dans les options du lieur. Pour compiler sous VC, s'arranger pour que le lieur ignore toutes les librairies par défaut (/nodefaultlib).

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

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

#include <windows.h>
#include <tchar.h>
#include <commctrl.h>


HINSTANCE _hThisInstance;              /* Handle du module                    */
HWND _hWnd;                            /* Handle de la fenêtre                */
HWND _hStatusBar;                      /* Handle sur la bar de status         */
HWND _hListView;                       /* Handle sur la listview              */
LPTSTR _lpAppName = _T("ListView");    /* Nom de l'appli                      */

DWORD _nStatusBarHeight;               /* Redimenssionement de la listview    */
TCHAR _lpItems[3][10] = {_T("titi"), _T("toto"), _T("tata")};

/**
 * Affiche un message d'erreur correspondant à la dernière erreur Win32
 */
DWORD ShowLastError()
{
  DWORD nLastError;           /* Numéro de l'erreur                           */
  LPTSTR lpMessageBuffer;     /* Récupération du message                      */

  nLastError = GetLastError();

  /* Formatage du message */
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (void*)&lpMessageBuffer, 0, NULL);

  /* Affichage du message */
  MessageBox(NULL, lpMessageBuffer, _T("ERROR"), MB_OK | MB_ICONERROR);

  LocalFree(lpMessageBuffer);
  return nLastError;
}

/**
 * Traitement des messages
 */
LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
{
  MINMAXINFO *lpMinMaxInfo;   /* Info sur les tailles min et max de la fenêtre */
  RECT clientRect;            /* Taille de la zone cliente                     */
  int bHandled;               /* Pour savoir si le message est traité          */
  long nResult;

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

    case WM_SIZE:
      /* On signale à la barre de status que la fenêtre a été redimenssionnée */
      SendMessage(_hStatusBar, WM_SIZE, wParam, lParam);

      /* 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;

    case WM_NOTIFY:
      if (((NMHDR*)lParam)->code == LVN_GETINFOTIP)
        SendMessage(_hStatusBar, SB_SETTEXT, 0, (LPARAM)_lpItems[((NMLVGETINFOTIP*)lParam)->iItem]);
      break;

    case WM_DESTROY:
      /* On signale que le thread va s'arrêter */
      PostQuitMessage(0);
      bHandled = 1;
      break;
  }
  if (! bHandled)
    nResult = DefWindowProc(hWnd, nMessage, wParam, lParam);
  return nResult;
}

/**
 * Ajoute la barre de status
 */
int CreateStatusBar()
{
  int nWidth;                 /* Largeur de la partie 0                        */
  RECT statusBarRect;         /* Taille de la barre de status                  */
  int nResult;

  nResult = 0;

  /* Création de la barre de status */
  _hStatusBar = CreateWindowEx(0, STATUSCLASSNAME, (LPCTSTR)NULL,
                               SBARS_SIZEGRIP | WS_CHILD | WS_VISIBLE,
                               0, 0, 0, 0,
                               _hWnd, NULL, _hThisInstance, NULL);
  if (! _hStatusBar) goto the_end;


  /* Affectation du nombre de parties */
  nWidth = -1;
  SendMessage(_hStatusBar, SB_SETPARTS, (WPARAM)1, (LPARAM)&nWidth);

  /* Calcul de la hauteur de la barre de status */
  GetWindowRect(_hStatusBar, &statusBarRect);
  _nStatusBarHeight = statusBarRect.bottom - statusBarRect.top;

  nResult = 1;
the_end:
  return nResult;
}

/**
 * Crée une imagelist utilisée par la listview
 */
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
 */
int CreateItems()
{
  LVITEM item;
  int nI;

  item.mask = LVIF_TEXT | LVIF_IMAGE;
  item.iImage = 0;
  item.iSubItem = 0;

  /* Initialisation des items */
  for (nI = 0; nI < 3; nI++)
  {
    item.iItem = nI;
    item.pszText = _lpItems[nI];
    SendMessage(_hListView, LVM_INSERTITEM, 0, (LPARAM)&item);
  }

  return 1;
}

/**
 * Ajoute la listview
 */
int CreateListView()
{
  HWND hTips;     /* Handle sur les tool tips                                 */
  int nResult;

  nResult = 0;

  _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;

  /* Pour que la listview 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);

  if (! CreateImageList()) goto the_end;
  if (! CreateItems()) goto the_end;

  nResult = 1;
the_end:
  return nResult;
}

/**
 * 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 = WindowProcedure;
  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 barre de status */
  if (! CreateStatusBar()) 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);

  if (! CreateMyWindow())
  {
    nResult = ShowLastError();
    goto the_end;
  }

  /* 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;
}

mardi 14 avril 2009 à 21:38:23 | Re : curseur sur icone

juju116

ah ben merci pour le code ; je vais essayé de l'etudié pour comprendre comment ça marche, en fait ce que je veu faire c'est que lorsque ma souris passe sur un icone de mon bureau, ou un iconde fichier dossier etc une fenetre s'active au bout d'un délais et que je puisse avoir differentes info sur l'icone, sa taille, son contenu, par exemple pour un dossier de musique avoir des info sur les pistes, l'lbum, la taille, un curseur interactif seulement quand on mexplique ben j'avour j'ai du mal, donc si tu peu me proposer une code et mettre des petites explication ça m'aideré beaucoup =) merci d'avence.
mercredi 15 avril 2009 à 09:36:44 | Re : curseur sur icone

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Ah, il s'agit donc bien de faire ça pour une autre application... En l'occurrence l'explorateur windows (explorer.exe), qui gère aussi les icônes du bureau.

Après inspection via spy++, sous XP, la fenêtre utilisée pour le bureau et dans l'explorateur est de classe SysListView32 et de caption FolderView. Ces fenêtres ont bien le style étendu LVS_EX_INFOTIP (Normal, vu qu'elle affiche des tool tips). Des WM_NOTIFY sont donc bien envoyés lorsque la souris reste sur un item.

Je crois qu'il faudrait que tu mettes en place un hook des messages. Exemple ici et . Globalement, il faut que tu mélanges le source ci-dessus avec un de ces deux sources, mais pas en faisant un hook global. Il faudrait juste hooker les messages envoyés aux SysListView32.
mercredi 15 avril 2009 à 17:35:23 | Re : curseur sur icone

juju116

mon dieux ^^ ben merci à force de mdonner des infos comme ça jyarrivereré peut etre :p c dur quand on debute :(

1 2

Cette discussion est classée dans : aider, icone, curseur, quelqu


Répondre à ce message

Sujets en rapport avec ce message

modifier offsets [ par zelze ] Slt...Quelqu'un pourrait il m'aider:Voila j'aimerai que mon prog modifie un offset précit d'un fichier...Quelqu'un pourrait il m'aider ou me donner le asm Programmer needed [ par Blustuff ] Je cherche quelqu'un qui pourrait m'aider sur la conception d'un émulateur DOS, donc quelqu'un qui connait bien l'assembleur, qui pourrait m'aider voi a l aide !!! [ par romigui ] est ce que quelqu un peu m aider ??? je m y connais pas du tout en programmation et je voudrais faire mes debuts , on m as dit qu il fallé d abord cho quelqu'un pour m'aider [ par thebed ] salut a tous mon pb est je ne c pa comment faire la transmition des données càdj'ai 2 poste 1 serveur(S) et 1 client(C)C envoi 1 demande d'autorisaton Comparaison de fichier en C [ par mohken ] Bonjour, Est ce que quelqu'un peut m'aider? Jeune développeur LabWindows ( environnement C), je souhaite effectuer une comparaison de fichier mais j comparaison d'une image [ par Kyz78 ] j'ai un projet en informatique et dedans je doit faire une comparaison d'images(bmp), je ne sais par où débuter. j'aimerais que quelqu'un puisse ma'ai cherche quelqu'un pour m'aider [ par StrikerFred ] bonjour à tous !je vais peut-être demander quelque chose d'impossible mais bon...y'a un mois je me suis tourné vers la programmation 3d (jeux) avec c+ TtabCtrl, quelqu'un peut m'aider ? [ par Nourdine73 ] je réalise actuellement un projet SDI (MFC) avec plusieurs vue. sur une d'entre elle, je dispose de controles et d'un TabCtrl avec 3 onglets. à partir Recherche personne pour m'aider a etablir un "plan" pour la conception d'un jeu video en 3D [ par yoshi94 ] Bonjour a tous.Je recherche quelqu'un qui pourrais m'aider a etablir une sorte de structure de classe pour refaire proprement un jeux que j'ai deja fa Crypter avec DES [ par Sosy08 ] SVP, prenez la peine de tous lire, c'est peut être un peu long, mais sa explique tous. Merci.SVP, est ce que quelqu'un pourez m'aider à écrire un prog


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,137 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales