Drag&Drop

Résolu
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
Bonjour à tous,

je souhaiterai effectuer un drag&drop sur une edit.
J'arrive parfaitement bien à utiliser le drag&drop sur une fenêtre entière.
Comment arriver à limiter le drag&drop (icône compris) sur la seule edit désirée d'une interface graphique qui en compte plusieurs.
Si vous voulez plus de précisions, ya qu'à demander. ;-)
Merci d'avance.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"

18 réponses

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Pour l'instant je me contente de ma pseudo solution qui est de créer le TabControl en dernier.
Comme ça, je fais ce que je veux avec mon Drag & Drop.

YOYO, @+
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Tu mets le style WS_EX_ACCEPTFILES seulement sur l'edit, voila tout

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
J'avais déjà essayé ça, mais sans succès.
Je vais détailler ma procédure quand je fais un drag and drop sur la fenêtre.

Je crée ma fenêtre avec CreateWindowEx(...) sans style WS_EX_ACCEPTFILES et dans le message WM_CREATE de la fenêtre, je fais DragAcceptFiles(frmhWnd, true); où frmhWnd est le HWND de la fenêtre.
Je crée mes edits avec CreateWindowEx(...) sans style WS_EX_ACCEPTFILES non plus.
Ensuite quand un drag and drop intervient, je traite le message WM_DROPFILES pour savoir le nom du fichier déposé sur la fenêtre.
Ca fonctionne sans souci. Que faut t'il changer pour avoir uniquement un message WM_DROPFILES quand le dépôt de fichier a lieu sur une edit ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Tu fais comme je t'ai dit, tu mets le style WS_EX_ACCEPTFILES pour l'edit (pas besoin d'appeler DragAcceptFiles comme ca).
Mais c'est l'edit qui va recevoir le message WM_DROPFILES, il faut donc le sous-classer:

WNDPROC DefEditproc;
LRESULT CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  if(uMsg == WM_DROPFILES)
  {
    // Traitement drag&drop
  }
  return DefEditproc(hWnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK AppWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  HWND hEdit;
  switch(uMsg)
  {
  case WM_CREATE:
    hEdit = CreateWindowEx(WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE, "EDIT", 0, WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hWnd, 0, g_hInst, 0);
    DefEditproc = (WNDPROC)SetWindowLongPtr(hEdit, GWL_WNDPROC, (LONG_PTR)EditProc);
    break;
  }
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Je comprends pas pourquoi ça fonctionne pas. Je fais la même chose que toi mais ça veut pas.
Petite précision, quand je crée ma fenêtre avec WS_EX_ACCEPTFILES (donc sans DragAcceptFiles) le drag and drop marche du tonerre.
Ca t'inspire ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
J'ai essayé l'exemple que je t'ai donné, et il fonctionne très bien. Tu n'a qu'a faire un copier coller. Pas besoin de DragAcceptFiles, la seule chose est que l'edit doit avoir WS_EX_ACCEPTFILES

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Tu peux mettre ton projet en lien stp, parce qu'on dirait qu'aucun objet créé (avec le style WS_EX_ACCEPTFILES
) sur la fenêtre n'accepte le drag and drop ? Par contre avec la fenêtre elle-même pas de problème.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Malheureusement ce que tu as mis en lien ne m'a pas aidé, ton exe se ferme aussitôt à peine lancé, du coup j'essaie de compiler moi-même (dev-c++ 4.9.9.2) et après qq changements minimes ça compile et quand je lance l'exe, idem qu'avec le tien.
Il se ferme aussitôt qu'on le lance. En fait il s'avère que c'est l'enregistrement de la classe de la fenêtre qui échoue.
Mais j'ai un début de réponse tout de même. J'ai remarqué que quand je crée toute mon interface sur la fenêtre, si mon edit est créé après mon fameux tabcontrol (si tu te souviens de mon précédent post) le drag&drop foire.
Par contre si je le crée avant, ça marche nickel !
Tu as une explication à ça ou même une idée ? Moi je dois avouer que ça me troue le c.. !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Bizarre, l'exe se lance bien chez moi... (tu as quel windows?)
J'ai modifié quelques trucs, tu peux réessayer

Essaie toujours ca, on verra après si ca vient du TabControl

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
http://vecchio56.free.fr/OnglDlg/



Même avec un TabControl, pas de problème

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Tes deux exe fonctionnent bien. Sur le deuxième ya juste une petite chose.
Sur l'edit du premier onglet le drag&drop marche mais pas sur celle de l'onglet suivant.
C'était fait exprès ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Oui, seul le premier à le style WS_EX_ACCEPTFILES

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Oui pardon j'avais pas regardé le fichier ressource.
Là je comprends tjs pas pourquoi. Tu as essayé en mettant ton tabcontrol avant les edits dans le fichier ressource ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
C'est vrai, dans ce cas la ça ne marche pas, c'est bizarre

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Ah toi aussi ! Ca me rassure un peu.
J'ai repéré un style étendu pour les TabControl :[javascript:hhal_5.Click() OleInitialize] before setting this style.
J'ai pas essayé par contre. Mais c'est à fouiller je pense.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Ouais mais dans ce cas la c'est un peu différent, tu vas devoir travailler avec OLE (regarde la gueule de la structure <name>NMOBJECTNOTIFY</name>)<link href="../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="struct" proj="platsdk" name="NMOBJECTNOTIFY" pubpath="/platform/commctls/common/structures/nmobjectnotify.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_NMOBJECTNOTIFY"></mshelp:keyword><mshelp:keyword index="A" term="_win32_NMOBJECTNOTIFY_cpp"></mshelp:keyword><mshelp:toctitle title="NMOBJECTNOTIFY Structure"></mshelp:toctitle><mshelp:rltitle title="NMOBJECTNOTIFY Structure ()"></mshelp:rltitle><mshelp:keyword index="F" term="NMOBJECTNOTIFY"></mshelp:keyword><mshelp:keyword index="K" term="NMOBJECTNOTIFY"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="Controls"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbControls"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="NMOBJECTNOTIFY"></mshelp:attr><mshelp:attr name="APIType" value="COM"></mshelp:attr><mshelp:attr name="APILocation" value="comctl32.dll"></mshelp:attr><mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Oui en effet, ça donne pas vraiment envie ! LOL
C'est plus simple de créer le Tab Control à la fin... :-p

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"