(DotNet c++) SendMessage et WindowProc

SendMessage et WindowProc (DotNet c++) - C++ - Programmation

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!

Reply

Marsh Posté le 11-04-2006 à 19:43:36   

Reply

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  
 

Reply

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...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-04-2006 à 09:00:32    

Code :
  1. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  2. {
  3.   LRESULT result = 0; // code de retour
  4.   // en fonction du message...
  5.   switch ( uMsg)
  6.   {
  7.     case WM_MESSAGE_Y_WANT_TO_INTERCEPT:
  8.       // note: pas de parenthèses
  9.    
  10.       // en supposant que Text soit déclaré en char[aSize]
  11.       strcpy(textBox1->Text, (const char*)lParam);
  12.       break;
  13.    
  14.     // d'autres messages, case ...
  15.     default: // traitement par défaut
  16.         result = DefWindowProc(hwnd, uMsg, wParam, lParam);
  17.   }
  18.   return result;
  19. }
  20. // utilisation
  21. SendMessage(hWnd, WM_MESSAGE_Y_WANT_TO_INTERCEPT, WPARAM(0), LPARAM(buf));


 
 
Par contre en quoi SetWindowText() ne fonctionne pas pour toi ?

Message cité 1 fois
Message édité par slash33 le 12-04-2006 à 09:11:41
Reply

Marsh Posté le 12-04-2006 à 09:06:45    

slash33 a écrit :

Code :
  1. // utilisation
  2. SendMessage(hf,NULL, NULL ,LPARAM(buf));



t'as pas l'impression d'avoir oublié un truc là ? [:petrus dei]
 
edit: le fourbe a édité

Message cité 1 fois
Message édité par Harkonnen le 12-04-2006 à 09:07:10

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-04-2006 à 09:13:15    

Harkonnen a écrit :

t'as pas l'impression d'avoir oublié un truc là ? [:petrus dei]
 
edit: le fourbe a édité


Je précise : édité avant d'avoir lu ton message.  :o  
 
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.

Reply

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 ? :sweat:

Reply

Marsh Posté le 12-04-2006 à 09:18:09    

slash33 a écrit :


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.


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 :
  1. textBox1->Text = S"kikoo lol asv ?"


voila ! 1 ligne, pas de win32 et de C troué de partout, du code managé propre et net


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 ? :sweat:


non, c'est lui qui se chie dessus : cf mon précédent message


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-04-2006 à 09:18:36   

Reply

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 ? :sweat:


En l'occurence, oui...

Reply

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 ?

Reply

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)

Reply

Marsh Posté le 12-04-2006 à 09:41:40    

FlorentG a écrit :

En l'occurence, oui...


plait il ? [:heink]
 

slash33 a écrit :


Le S"some text" c'est pour forcer le type String ? (désolé je débute en .NET)


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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-04-2006 à 09:42:00    

Reply

Marsh Posté le 12-04-2006 à 09:43:14    


[:indiana jones]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh 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..

Reply

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

Message cité 1 fois
Message édité par Harkonnen le 13-04-2006 à 11:33:42

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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  :D

Reply

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 [:banzai]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 ?


Message édité par slash33 le 13-04-2006 à 13:21:12
Reply

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 :D
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 :D

Message cité 1 fois
Message édité par Harkonnen le 13-04-2006 à 13:30:51

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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... [:spamafote]
 

Harkonnen a écrit :

y'a plein de gens qui connaissent Win32 mais qui veulent pas répondre :D


Ben je dois être de ceux là alors...  :D  
 
Mais, pour ma défense, je n'ai vu ce super topic que récemment  :jap:

Message cité 1 fois
Message édité par slash33 le 13-04-2006 à 13:44:07
Reply

Marsh Posté le 13-04-2006 à 13:45:08    

slash33 a écrit :

Ah. Je vois que je n'y suis pas... [:spamafote]

j'ai pas tout le monde en tete non plus :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-04-2006 à 13:46:10    

y'a HelloWorld aussi qui maitrise pas mal


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-04-2006 à 13:47:18    

Oui effectivement ce pseudo me dit quelque chose

Reply

Marsh Posté le 13-04-2006 à 14:05:31    

est ce que quelqu'un peut m'aider à mon problème

Reply

Marsh Posté le 13-04-2006 à 14:07:59    

on t'as déjà répondu plusieurs fois !
 
lis les réponses rognotudju !

Reply

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed