blem chelou avec SendMessage MFC

blem chelou avec SendMessage MFC - C++ - Programmation

Marsh Posté le 10-10-2002 à 09:59:49    

hello,
je pense que ce pb s'adresse aux vieux routard des MFC;
voila:
je programme un editeur de texe sous BC5, en utilisant directement des "SendMessage".
pour obtenir des infos sur un "edit control" (doc borland)
ma requete est "SendMessage(Handle,EM_GETLINE,ligne,chaine)
je recupere ainsi dans "chaine" une ligne de texte.
cela marche très bien et est beaucoup plus rapide que "TRichedit"
 
mais cette commande me retourne une chaine vide après ouverture d'une fenêtre openGL dans mon programme.
Il s'agit d'un petit moteur graphique "fait maison" appliqué sur une fiche de borland.
même après fermeture de cette fenêtre, les messages "EM_GETLINE"
ne fonctionnent plus que très rarement et me retourne une chaine vide la plupart du temps. (le coté sporadique du bug est assez bizarre...)
cela vient peut-etre du getDC effectuer pour ma fenêtre openGL...
en fait je n'en sait rien du tout.
 
merci de votre aide.

Reply

Marsh Posté le 10-10-2002 à 09:59:49   

Reply

Marsh Posté le 10-10-2002 à 15:43:04    

A tout hasard, le Handle, il est bien tj obtenu de la même façon ? Il n'est pas gardé sous le coude ? Des fois qu'il change en route (juste par précaution).
 
Y a peut-être un écrasement de mémoire qq part, qui apparaît alors.
 
Après GetDC(), y a bien ReleaseDC() quand le hDC ne sert plus ?

Reply

Marsh Posté le 10-10-2002 à 16:15:45    

merci de ton aide,
le Handle, comme je suis dans une classe dérivée de TForm (la fenetre classique sous borland), j'utilise this->Handle pour faire mes SendMessage dont ca devrait être bon.
le HDC est "releaser" dans le destructeur de ma fenetre opengl.
meme quand je referme cette fenetre, les SendMessage "EX_GETLINE"
ne fonctionne toujours pas (sauf un coup sur 100 :-( ).
 
sous borland : Lines->String[x] sur une TRichedit fonctionne par contre. c'est trop bizarre.

Reply

Marsh Posté le 10-10-2002 à 16:24:36    

Au fait, ce n'est pas de la prog MFC, mais de la prog Win32 (MFC c'est un ensemble de classes by MS au meme titre que la librairie VCL de chez Borland que tu utilises)
 
http://msdn.microsoft.com/library/ [...] etline.asp
 

Citation :

Pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.


 
Tu as initialise le 1° word de ligne avant de passer en parametre ?
Si celui ci vaut 0, je dirais que c'est normal que rien ne soit renvoyé.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-10-2002 à 17:31:57    

ok, là helloword tu marques un point.
mais je n'est pas vu ta citation dans ma doc MFC de borland,
je savais juste que la commande ecrivait la taille de la chaine ecrite mais pas que je devait l'ecrire.
d'ailleur je ne l'ai jammais fait et ca marchait très bien comme ca !! ;-)
je faisait mon allocation comme un bête tableau:
char * chaine = new char[X];
mais je vais faire  ce que dit ta citation (merci pour le lien)
heuuu...
 
 
"set the first word of this buffer to the size, in TCHARs, of the buffer"
 
comment on fait ca proprement deja ?
merci.
 
 
ps:
j'ai dit une bêtise c'est bien ma classe dérivée de trichedit où je récupère le Handle, (merci pour la précision).

Reply

Marsh Posté le 10-10-2002 à 19:42:44    

Un truc du genre :
((LPWORD)liste)[0] = taille;


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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