StatusBar, SendMessage et SB_GETTEXT [C, C++] - C++ - Programmation
Marsh Posté le 21-09-2002 à 11:00:28
youdontcare a écrit a écrit : WM_GETTEXT ? |
c'est ce que précise ton lien ...
a priori, c'est toujours WM_GETTEXT pour récupérer le texte d'une fenêtre, sauf si celle-ci contient plusieurs éléments de texte (comme une listbox).
Marsh Posté le 21-09-2002 à 11:01:26
Oui mais WM_GETTEXT ne donne que le texte dans l'index 0 de la StatusBar
Marsh Posté le 21-09-2002 à 11:04:25
Je parle de celui-ci :
Citation : |
Et celui-ci :
Citation : |
Marsh Posté le 21-09-2002 à 11:09:16
ça devrait effectivement marcher avec SB_GETTEXT. tu as regardé avec spy++ si la status bar avait des fenêtre filles ?
Marsh Posté le 21-09-2002 à 11:48:24
MMhhmm attend ... Non elle n'a pas de fenêtre fille
J'ai oublié de dire ... je suis sur Borland C++ Builder ( je pense que WinSight c'est la même chose que Spy++ )
Et pour revenir à mon problème je pense que SB_GETTEXT me retourne l'adresse en memoire du texte et non le texte ...
Marsh Posté le 21-09-2002 à 12:10:11
strikenet a écrit a écrit : Et pour revenir à mon problème je pense que SB_GETTEXT me retourne l'adresse en memoire du texte et non le texte ... |
cf la doc : http://msdn.microsoft.com/library/ [...] ettext.asp
tu dois spécifier le buffer à remplir. il y a SB_GETTEXTLENGTH qui retourne la taille nécessaire. déjà, ce message renvoie-t-il une valeur cohérente ?
poste ton code, j'ai l'impression qu'il y a plutôt un problème de buffer.
Marsh Posté le 21-09-2002 à 13:28:33
J'ai simplifié le code pour mes tests :
Code :
|
Marsh Posté le 21-09-2002 à 13:48:47
>> nbCaractere = LOWORD(SendMessage(Handle, SB_GETTEXTLENGTH, 0, 0));
ça marche ? ça marche comment, il y a un opérateur de conversion int -> AnsiString ?
>> SendMessage(Handle, SB_GETTEXT, 0, (LPARAM)Element.c_str());
là aucune idée, je ne connais pas AnsiString. tu devrais essayer avec un bon vieux char* des familles :
int numChars = LOWORD(SendMessage(Handle, SB_GETTEXTLENGTH, 0, 0));
char* buffer = new char [numChars];
buffer[0] = 0; // cf la doc
int numChars2 = LOWORD(SendMessage(Handle, SB_GETTEXT, 0, buffer));
MessageBox(NULL, buffer, NULL, 0);
et regarde si numChars == numChars2.
//
ha, et je viens de remater le topic que tu as filé : si tu veux lire le texte d'une autre application, passer directement un pointeur n'est pas possible : il n'est valide que dans ton app. il y a un bout de code avec OpenProcess & co en bas.
(WM_GETTEXT a le même problème, mais c'est patché en interne pour la compatibilité descendante ... )
Marsh Posté le 21-09-2002 à 15:32:58
Quand je met : char* buffer = new char [numChars];
numchars2 = 0
Avec AnsiString numchars=numchars2
Personne n'a d'idée
Marsh Posté le 21-09-2002 à 15:37:24
strikenet a écrit a écrit : Personne n'a d'idée |
si c'est une autre app, il faut faire openprocess() & co. cf message précédent qui cf au thread.
Marsh Posté le 21-09-2002 à 10:56:18
J'aimerais récupurer le contenue d'une StatusBar.
J'ai essayé la même méthode que pour les listbox avec SB_GETTEXT mais ça n'a pas l'air d'être pareil ...
Et pourtant j'arrive à changer la couleur grace à SB_SETBKCOLOR
J'ai trouvé un topic sur ce sujet mais c'est en Delphi
-> http://www.experts-exchange.com/Pr [...] 09741.html
Si quelqu'un c'est comment faire
@+