SendMessage et WindowProc (DotNet c++) - C++ - Programmation
Marsh Posté le 11-04-2006 à 20:08:13
Posté le: Mar Avr 11, 2006 20:04 Sujet du message:
--------------------------------------------------------------------------------
salut,
je voudrais avoir de l'aide car je suis vraiment perdu, j'ai essayé pleins de choses mais rien ne va!!!
j'ai pensé à une solution mais il me manque des données(?): dans le fichier.h
public: System::Void WndProc(LP)
{
//je voudrais récuperer les données du buf pour les placer dans la textbox
switch ( lParam )
{
case (?) :
textBox1->Text = (?);
break;
}
Form::WndProc(m);
}
dans le fichier .cpp:
SendMessage(hf,NULL, NULL ,LPARAM(buf));
// hf est obtenue avec HWND hf = GetForegroundWindow();cette fonction est placée dans le fichier.h mais peut-être que cela ne donne pas le handle de mon formulaire
Marsh Posté le 12-04-2006 à 07:34:21
1/ Merci de ne pas paster le message pour upper, il suffit juste de poster un "up"
2/ upper un topic 20 mn après l'avoir créé, c'est limite... surtout pour de la prog Win32 pour laquelle les compétences sur ce forum sont peu nombreuses (on doit être à peine une dizaine en tout à maitriser le sujet)
3/ pour ton problème, je vois pas ce que le GetForegroundWindow() vient faire ici. il n'y en a absolument pas besoin. la fonction callback rattachée à une fenêtre se transmet au membre lpfnWndProc de la structure WNDCLASS rattachée à la fenêtre (que tu enregistres avec RegisterClass()).
4/ formidable le SendMessage() sans identifiant de message. vachement pratique pour que ta callback puisse identifier le message et le traiter en conséquence...
Marsh Posté le 12-04-2006 à 09:00:32
Code :
|
Par contre en quoi SetWindowText() ne fonctionne pas pour toi ?
Marsh Posté le 12-04-2006 à 09:06:45
slash33 a écrit :
|
t'as pas l'impression d'avoir oublié un truc là ?
edit: le fourbe a édité
Marsh Posté le 12-04-2006 à 09:12:29
de toute façon, c'est bancal son truc : il mélange du C/Win32 non managé avec du C++/.NET managé, ça va finir par lui péter au nez si ça ne l'a pas déja fait. parce que le mélange managé et non managé, si on ne sait pas utiliser les fonctions de marshalling qui vont bien, c'est une bombe à retardement
Marsh Posté le 12-04-2006 à 09:13:15
Harkonnen a écrit : t'as pas l'impression d'avoir oublié un truc là ? |
Je précise : édité avant d'avoir lu ton message.
Mais je ne comprends pas en quoi les fonctions standard de manipulation de champ texte ne lui suffisent pas.
En plus avec google, les exemples de WindowProc ne manquent pas.
Marsh Posté le 12-04-2006 à 09:15:08
Harkonnen a écrit : de toute façon, c'est bancal son truc : il mélange du C/Win32 non managé avec du C++/.NET managé, ça va finir par lui péter au nez si ça ne l'a pas déja fait. parce que le mélange managé et non managé, si on ne sait pas utiliser les fonctions de marshalling qui vont bien, c'est une bombe à retardement |
Tu veux dire que c'est spécifique à .NET cette façon d'initialiser le texte d'un champ ?
Marsh Posté le 12-04-2006 à 09:18:09
slash33 a écrit : |
il n'a meme pas besoin de WindowProc, strcpy, et de tout son bousin C/Win32. il utilise .NET et ça prend une ligne :
Code :
|
voila ! 1 ligne, pas de win32 et de C troué de partout, du code managé propre et net
Marsh Posté le 12-04-2006 à 09:18:36
slash33 a écrit : Tu veux dire que c'est spécifique à .NET cette façon d'initialiser le texte d'un champ ? |
non, c'est lui qui se chie dessus : cf mon précédent message
Marsh Posté le 12-04-2006 à 09:19:15
slash33 a écrit : Tu veux dire que c'est spécifique à .NET cette façon d'initialiser le texte d'un champ ? |
En l'occurence, oui...
Marsh Posté le 12-04-2006 à 09:19:22
Ah je crois que j'ai compris : le deuxième message de stgi02 montre une WindowProc de type WinForms, c'est ça ?
Marsh Posté le 12-04-2006 à 09:22:02
Harkonnen a écrit : voila ! 1 ligne, pas de win32 et de C troué de partout, du code managé propre et net |
Ah oui effectivement, ça à l'air sympa à l'usage!
Le S"some text" c'est pour forcer le type String ? (désolé je débute en .NET)
Marsh Posté le 12-04-2006 à 09:41:40
FlorentG a écrit : En l'occurence, oui... |
plait il ?
slash33 a écrit : |
oui voila. la chaine précédée d'un S indique que la chaine sera de type System::String*. en C++ managé, ce type de chaine est bien plus performant que les chaines littérales du C++ normal
Marsh Posté le 12-04-2006 à 09:42:00
ReplyMarsh Posté le 12-04-2006 à 09:43:14
ReplyMarsh Posté le 13-04-2006 à 11:16:42
bonjour, pouvez vous m'aider
au faite j' ai un fichier Form1.h [design] ou j' ai placer mon formulaire , ma textbox,..
un fichier Form1.h
j' ai aussi un fichier serial.cpp
ou j'effectue la réception et l'émission sur le port série
pour récupérer les données ,j'utlise :
ReadFile(hComm,&buf,..,..,..) ça fonctionne j' en suis sûr
mais mon problème est que je voudrai envoyer les données contenues dans buf dans la textbox, mais je suis bloqué
je ne peux pas faire Texbox1->text = "" dans ce fichier..
merci de bien vouloir m'aider car je suis bloqué depuis une semaine..
Marsh Posté le 13-04-2006 à 11:32:20
c'est normal que tu sois bloqué ! tu as lu ce que j'ai écrit ? tu mélanges du code managé avec du code non managé, et ça je peux te dire pour l'avoir testé et pour m'en être dépatouillé, que c'est une galère absolue !
ce qu'il faut que tu fasses, c'est du marshalling entre tes données managées et non managées.
en l'occurence, ici, il te faut convertir ton buffer (qui est un char[] je suppose) en type String de .NET. tu crois que ça se fait par l'opération du St Esprit ?
prends la MSDN, et regarde voir du coté de MarshalAs et UnmanagedType. utilise les pour faire ta conversion.
sinon, bien plus simple : n'utilise pas .NET, c'est de trop haut niveau pour ton application. étant donné que tu sembles coder bas niveau, le mieux dans ton cas, si tu ne veux pas te faire chier avec le Win32, est d'utiliser les MFC
Marsh Posté le 13-04-2006 à 12:08:07
Harkonnen a écrit : étant donné que tu sembles coder bas niveau, le mieux dans ton cas, si tu ne veux pas te faire chier avec le Win32, est d'utiliser les MFC |
Heu ça reste à voir
Marsh Posté le 13-04-2006 à 12:09:52
ben s'il tient absolument à utiliser VS 2003 pour faire ses fenêtres, il n'a pas le choix : Winforms ou MFC
sinon, c'est à la bite et au couteau, en Win32
Marsh Posté le 13-04-2006 à 13:18:56
Au fait, tu étais sérieux quand tu disais dans une autre file qu'il n'y avait qu'une dizaine de dévelo windows (WIN32/MFC) sur le forum ?
Marsh Posté le 13-04-2006 à 13:30:18
ben si tu regardes l'historique des topics MFC ou Win32, tu verras que très peu de forumeurs maitrisent le sujet finalement ! y'a chrisbk, moi, et quelques autres. il suffit de voir les intervenants du topic de chrisbk
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
edit: ou alors, y'a plein de gens qui connaissent Win32 mais qui veulent pas répondre
Marsh Posté le 13-04-2006 à 13:43:37
Harkonnen a écrit : y'a chrisbk, moi, et quelques autres |
Ah. Je vois que je n'y suis pas...
Harkonnen a écrit : y'a plein de gens qui connaissent Win32 mais qui veulent pas répondre |
Ben je dois être de ceux là alors...
Mais, pour ma défense, je n'ai vu ce super topic que récemment
Marsh Posté le 13-04-2006 à 13:45:08
slash33 a écrit : Ah. Je vois que je n'y suis pas... |
j'ai pas tout le monde en tete non plus
Marsh Posté le 13-04-2006 à 13:46:10
y'a HelloWorld aussi qui maitrise pas mal
Marsh Posté le 13-04-2006 à 14:05:31
ReplyMarsh Posté le 13-04-2006 à 14:07:59
on t'as déjà répondu plusieurs fois !
lis les réponses rognotudju !
Marsh Posté le 13-04-2006 à 14:12:02
stgi02 a écrit : est ce que quelqu'un peut m'aider à mon problème |
euh, tu as lu mes réponses ou tu le fais exprès ???
non parce que si tu continues à faire semblant de ne pas lire, j'ai une meilleure idée hein ! je ferme tes topics, et je t'envoie chez les teletubbies, comme ça tu ne pourras plus poster et tu auras tout le temps de lire les différentes réponses que je t'ai faites
Marsh Posté le 11-04-2006 à 19:43:36
salut,
je voudrais avoir de l'aide car je suis vraiment perdu, j'ai essayé pleins de choses mais rien ne va!!!
j'ai pensé à une solution mais il me manque des données(?): dans le fichier.h
[LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
//je voudrais récuperer les données du buf pour les placer dans la textbox
switch ( lParam )
{
case (?) :
textBox1->Text = (?);
break;
}
;
return DefWindowProc(hf,uMsg,wParam,lParam);
}
}
]
dans le .cpp:
[SendMessage(hf,NULL, NULL ,LPARAM(buf));
// hf est obtenue avec HWND hf = GetForegroundWindow();cette fonction est placée dans le fichier.h mais peut-être que cela ne donne pas le handle de mon formulaire
]
je prog sur visual studio .net 2003 c++
si vous pouvez me conseiller, merci!