2009-06-10 6 views
1

Je veux envoyer un double-clic à un listview. D'après ce que j'ai lu sur msdn, il me semble que je dois envoyer un message WM_NOTIFY et quelque chose avec NM_DBLCLK. Mais je ne comprends pas vraiment bien de l'implémenter. J'ai travaillé avec SendMessage avant, mais MSDN est pas clair sur la façon de remplir les struct et ainsi:Envoyer un double clic à un listview (C++, pas .net!)

WM_NOTIFY http://msdn.microsoft.com/en-us/library/bb775583(VS.85).aspx NM_DBLCLK http://msdn.microsoft.com/en-us/library/bb774867(VS.85).aspx

Répondre

2

Je suppose que vous allez dans la mauvaise voie. Probablement la meilleure façon d'envoyer un double-clic est d'envoyer deux clics, l'un immédiatement après l'autre. Cela a la meilleure chance de travailler et ne pas surprendre l'application avec une notification de double clic sur le bleu.

Si vous voulez envoyer la notification à la fenêtre parent, cela pourrait vous aider à démarrer:

NMITEMACTIVATE activate={0}; 
activate.hdr.hwndFrom = hWnd; // of the list view control 
activate.hdr.idFrom = id; // of the list view control 
activate.hdr.code = NM_DBLCLK; 

activate.iItem = iItem; // the id of the list item to click 
activate.iSubItem = iSubItem; 
activate.ptAction = ptAction; // where the event occurred 

::SendMessage(hWndParent, WM_NOTIFY, id, reinterpret_cast<LPNMITEMACTIVATE>(&activate)); 
+0

Le message pour le simple clic est exactement comme le double-clic, NM_LCLK. Je ne comprends pas le point. Bien sûr, je peux faire un WM_LBUTTONDBLCLK, mais pour l'utiliser, il faudrait que l'élément cliqué soit visible à l'écran, ce que je voudrais éviter si possible. –

+0

Le message notifaction est envoyé de la vue liste au contrôle parent. Il ne sert à rien de l'envoyer à la vue liste. Voulez-vous l'envoyer au parent? –

+0

Je pense que je comprends votre point de vue. Je pensais que ce serait possible de cette façon. Merci –

0

WM_NOTIFY est envoyé par le contrôle parent du contrôle d'informer le parent qu'un événement a eu lieu. Vous n'obtiendrez rien en l'envoyant au contrôle lui-même.

Sinon, je ne comprends pas vraiment ce que vous essayez de faire. Pouvez-vous clarifier s'il vous plait?

+0

J'ai une liste sur un autre programme qui en double-cliquant ouvre une fenêtre. C'est pourquoi je dois double-cliquer sur la liste. –

+0

Je vois. Dans ce cas, 1800 INFORMATIONS vous a déjà fourni une solution. – avakar

0

Nous pouvons utiliser la simulation cliquez sur la souris en utilisant des fonctions suivantes:

mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN, X, Y,0,0); 
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP, X, Y,0,0); 
Questions connexes