cast de CString vers int

cast de CString vers int - C++ - Programmation

Marsh Posté le 11-04-2003 à 10:23:30    

Encore une question surement tres con, mais j'arrive pas à trouver....
Comment on cast un CString vers un int... (pour récupérer la valeur d'un controle Edit et le transformer en entier...) à moins qu'il existe une fonction sur les CEdit qui le fasse directement.

Reply

Marsh Posté le 11-04-2003 à 10:23:30   

Reply

Marsh Posté le 11-04-2003 à 10:29:05    

Citation :


Converting a CString to an integer
The simplest way to convert a CString to an integer value is to use one of the standard string-to-integer conversion routines.
 
While generally you will suspect that _atoi is a good choice, it is rarely the right choice. If you play to be Unicode-ready, you should call the function _ttoi, which compiles into _atoi in ANSI code and _wtoi in Unicode code. You can also consider using _tcstoul (for unsigned conversion to any radix, such as 2, 8, 10 or 16) or _tcstol (for signed conversion to any radix). For example, here are some examples:
 
CString hex = _T("FAB" );
CString decimal = _T("4011" );
ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));


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

Marsh Posté le 11-04-2003 à 10:31:37    

Simple tu PEUX PAS caster comme ca.
 
Ton CEdit tu recup comment la valeur ?
- Si tu as un control (via un GetDlgItem), tu recup une CString et la solution pourrait etre

Code :
  1. int iNum = atoi(taCString.GetBuffer(0));


- Si tu as attache une variable a ton EditBox, ben choisi un INT plutot qu'une CString et ca va tout seul

Reply

Marsh Posté le 11-04-2003 à 10:32:30    

Erf grillaid pour la 1 :o

Reply

Marsh Posté le 11-04-2003 à 10:34:12    

VisualC++ a écrit :

Simple tu PEUX PAS caster comme ca.
 
Ton CEdit tu recup comment la valeur ?
- Si tu as un control (via un GetDlgItem), tu recup une CString et la solution pourrait etre

Code :
  1. int iNum = atoi(taCString.GetBuffer(0));


- Si tu as attache une variable a ton EditBox, ben choisi un INT plutot qu'une CString et ca va tout seul


 
Ta solution à l'air plus simple que celle d'Harkonnen...
Ben je récupere un CString en faisant GetDlgItem, puis GetWindowText sur le controle CEdit..., mais pour mes vérifications et mes calculs, il me faudrait un Int... Et il faut en plus que je l'écrive dans mon objet CVariableElc (que tu m'as conseillé hier...) donc il me faut un int...

Reply

Marsh Posté le 11-04-2003 à 10:36:53    

Euh c 'est la mm solution la 1 la, juste que version ANSI atoi alors que ttoi a la compile il passe en version ANSI ou UNICODE suivant ce que tu utilises.

Reply

Marsh Posté le 11-04-2003 à 10:41:17    

encore une question, est ce que le domodal marche sur une fenetre qui n'est pas active ?
Pour en revenir à mon pb d'hier, j'ai implanté la classe que ce cher VisualC++ m'a montrée.
Dans le sens fenetre principale -> fenetres secondaires, les paramètres passent. Mais c'est la fenetre secondaire qui permet de modifier ces paramètres. Je dois donc les renvoyer vers la première fenetre. Mais je ne peux pas refaire appel au constructeur de la première fenetre, puisqu'elle existe déja !! et je n'en veux pas une deuxieme...
 
Chaque fenetre possede un objet CVariableElc. Est que je peux faire, par exemple :  

Code :
  1. CPremiereFenetreDlg::NomVarElc.m_fnvSetVr1(x);


c'est à dire, faire appel aux fonctions de l'objet d'une autre fenetre... tout est en public... j'aurais le droit non ??

Reply

Marsh Posté le 11-04-2003 à 10:44:29    

Euh j ai peur de comprendre ce que tu as fait la en te lisant .........
 
J'ai jamais dit que tt les fenetre devait avoir un objet CVariableElec !
> 1 objet CVariableElec POUR TOUT ton projet.
 
Et tu passes cet objet de dialog en dialog afin que chacune puisse recup et modifier les valeurs, mais du mm objet.

Reply

Marsh Posté le 11-04-2003 à 10:47:22    

:pfff:  
...pardon...
 
ben oui, mais je savais pas ou le mettre moi cet objet unique !!!!!
 
...
J'ai fait la classe CVariableElc, mais après je savais pas. En fait disons plutot que j'ai essayé un objet unique, mais à chaque fois que j'essayais de m'en servir ailleurs, j'avais droit à des "undeclared identifier".... alors comme je l'ai dit, mes connaissances ne sont que très réduites ! je sais plus quoi faire moi...
Je vais m'exiler au mexique pour pas finir ce projet... au moins ils viendront pas me chercher la bas...

Reply

Marsh Posté le 11-04-2003 à 10:50:05    

la je l'ai mis avec un objet qui était dans le dossier globals..
mais j'ai 45 erreurs à la compilation maintenant... :/
 
 
edit: en attendant qu'une ame généreuse me tende la main je vais en pause... trop d'émotions pour ce matin moi...  :sweat:


Message édité par backdafuckup le 11-04-2003 à 10:52:30
Reply

Marsh Posté le 11-04-2003 à 10:50:05   

Reply

Marsh Posté le 11-04-2003 à 10:59:26    

pour recuperer la valeur de ton edit fais tout simplement updatedata(TRUE); ainsi la valeur qu'il y a dans l'edit sera transferee dans la valiable auquel l'edit est associe et updatedata(FALSE); pour faire l'inverse.
 
Mais pour tes variables a passer d'une boite a l'autre :
dans ta boite modale :  
int var1;
 
dans ton doc :  
int var1;
//initialisation de var1
boitemodale.var1 = var1;
boitemodale.DoModal();
 
et ainsi de suite d'une boite a l'autre et pour reprendre les valeurs de ta boite modal dans ton document :
boitemodale.DoModal();
var1 = boitemodal.var1;
mais fais attention que dans ce cas ci, ta variable var1 de ta boite modale ne doit pas etre associee a un edit sinon elle est detruite (donc si c'est le cas, copie la dans une autre variable du genre var1_copy_for_transfert).
 
C'est bien ca VisualC++?


Message édité par polo021 le 11-04-2003 à 11:01:09
Reply

Marsh Posté le 11-04-2003 à 11:09:14    

Harkonnen a écrit :

Citation :


Converting a CString to an integer
The simplest way to convert a CString to an integer value is to use one of the standard string-to-integer conversion routines.
 
While generally you will suspect that _atoi is a good choice, it is rarely the right choice. If you play to be Unicode-ready, you should call the function _ttoi, which compiles into _atoi in ANSI code and _wtoi in Unicode code. You can also consider using _tcstoul (for unsigned conversion to any radix, such as 2, 8, 10 or 16) or _tcstol (for signed conversion to any radix). For example, here are some examples:
 
CString hex = _T("FAB" );
CString decimal = _T("4011" );
ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));




 
tu sais toujours pas comment faire marcher mon popup menu sur l'icone de notification ?? :D

Reply

Marsh Posté le 11-04-2003 à 11:09:52    

polo021 a écrit :

pour recuperer la valeur de ton edit fais tout simplement updatedata(TRUE); ainsi la valeur qu'il y a dans l'edit sera transferee dans la valiable auquel l'edit est associe et updatedata(FALSE); pour faire l'inverse.
 
Mais pour tes variables a passer d'une boite a l'autre :
dans ta boite modale :  
int var1;
 
dans ton doc :  
int var1;
//initialisation de var1
boitemodale.var1 = var1;
boitemodale.DoModal();
 
et ainsi de suite d'une boite a l'autre et pour reprendre les valeurs de ta boite modal dans ton document :
boitemodale.DoModal();
var1 = boitemodal.var1;
mais fais attention que dans ce cas ci, ta variable var1 de ta boite modale ne doit pas etre associee a un edit sinon elle est detruite (donc si c'est le cas, copie la dans une autre variable du genre var1_copy_for_transfert).
 
C'est bien ca VisualC++?


 
mais g pas de doc !!!!!!!!!!

Reply

Marsh Posté le 11-04-2003 à 11:12:40    

backdafuckup a écrit :


 
mais g pas de doc !!!!!!!!!!


 
ha oui, vraiment desole j'avais deja oublie  :(

Reply

Marsh Posté le 11-04-2003 à 11:14:50    

polo021 a écrit :


 
ha oui, vraiment desole j'avais deja oublie  :(  


 
bah c pas grave.... je t'en veux pas tu sais...  [:twark]

Reply

Marsh Posté le 11-04-2003 à 11:23:22    

:cry:  :cry:  :cry:  :cry:  
pourquoi plus personne ne veut m'aiddeeeerrr ?

Reply

Marsh Posté le 11-04-2003 à 11:35:35    

je pue ?  :heink:

Reply

Marsh Posté le 11-04-2003 à 11:40:20    

[:spamafote]
 
T'as bien autre chose a faire en attendant?

Reply

Marsh Posté le 11-04-2003 à 11:42:46    

ouais, attendre 12h et me barrer ... :/
 
Le problème c que j'aimerais bien finir cette histoire de paramètres avant d'aller bouffer.... Je comprends pas bien tout ce que m'a dit VisualC++, j'aimerais bien qu'il m'explique ou je peux instancier ma classe CVariableElc pour que l'objet créé soit accessible par toutes les autres classes....

Reply

Marsh Posté le 11-04-2003 à 11:52:37    

Bah desole on a pas le temps de te repondre, on bosse aussi (enfin je suppose pour la pluspart lol)
 
Ben je sais pas ou tu peux la foutre la classe, je connais mm pas c koi ton architecture de ton projet, un Dialog based, un single/multi view, autre ?

Reply

Marsh Posté le 11-04-2003 à 13:48:22    

backdafuckup a écrit :


 
tu sais toujours pas comment faire marcher mon popup menu sur l'icone de notification ?? :D


ben en ce moment j'ai pas trop le temps, je regarderais ce wk end


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

Marsh Posté le 11-04-2003 à 13:49:55    


prochaine fois => TT


Message édité par Harkonnen le 11-04-2003 à 13:50:21

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

Marsh Posté le 11-04-2003 à 14:19:11    

VisualC++ a écrit :

Bah desole on a pas le temps de te repondre, on bosse aussi (enfin je suppose pour la pluspart lol)
 
Ben je sais pas ou tu peux la foutre la classe, je connais mm pas c koi ton architecture de ton projet, un Dialog based, un single/multi view, autre ?


 
c un Dialog based....  
je suis désolé, je vous en demande peut etre beaucoup, mais je suis dans une situation qui n'est pas agréable, je dois finir ce projet dans moins de deux mois, et deux mois, ca a pas l'air comme ca, mais c court....
En tout cas merci à toi pour ta patience et tous tes conseils.
Moi aussi je travaille d'ailleurs, mais sans vous je serais pas ou j'en suis de mon projet (et pourtant ce n'est pas la plus grosse partie).
Mon projet, pour te le décrire un ptit peu, est composé de trois dlgboxes, ce qui fait donc deja 3 classes. Il y a en plus la classe App (générée automatiquement), plus la classe DlgAbout, généré automatiquement aussi, et enfin la classe CVariableElc.
En plus, dans l'arborescence, il y a un deuxieme dossier, nommé globals, contenant une variable theApp de type [CMonAppli]App, et j'y ai rajouté un objet ObjElc qui instancie la classe CVariableElc, croyant que toutes les classes y auraient à ce moment accès... Mais je me suis trompé.
 
Voila, si vous avez le temps, et si ca vous embete pas trop, je réclame une sainte aide...  [:flclsd]

Reply

Marsh Posté le 11-04-2003 à 14:24:39    

Harkonnen a écrit :


prochaine fois => TT


 
ca veut dire koi TT ???
Et en quoi est ce mal de poser une question, et surtout de demander une réponse ??
Excuse moi d'être insistant, mais tu comprends bien que si je demande, ce n'est pas pour rien :  
1) Dans mon entreprise, personne ne sait faire de C++ donc encore moins de MFC
2) Je ne peux pas compter sur mes profs d'iut, qui à la première question que je leur ait posé, n'ont pas su répondre (quand je leur ai demandé comment faire un icone de notification, il m'a dit qu'il fallait faire glisser l'application dans la barre des taches  :lol:  :lol:  :lol:, et pour que l'appli démarre en même temps que windows, il m'a dit de la mettre dans 'Menu Démarrer'->'Programmes' !!  :??: )
3) Je suis nul en C++, les concepts objet ne sont pas restés dans mon ptit cerveau, je n'ai que quelques bases, donc, j'ai besoin de gens qui savent, et VisualC++, Polo, toi et les autres en font partie....
 
Donc, je te pose la question, tu penses que ca me ferait du bien d'etre TT (je sai meme pas ce que c, pas plus que je ne sais ce qu'est un troll, et pourtant c écrit partout dans le forum) ou bien d'etre BAN (ca je sais, on me l'a déja fait... j'en ai marre des télétubbies...).
 
Voila, j'espere que ca suffira à calmer l'agressivité notoire de ces derniers messages...
 
Salutations.

Reply

Marsh Posté le 11-04-2003 à 14:30:47    

Euh c rien la ca se projet je te rassure si y a que 3 Dlg ca se fait en 30 min ;)
 
Sinon, ben donc tu as une methode simple
 
1 - ds ta CWinApp un objet CVar.. en public.

Code :
  1. public:
  2.     CVariableElec*    m_pVariableElec;


 
2 - dans le constructeur de ton App

Code :
  1. m_pVariableElec = (CVariableElec*) new CVariableElec;


 
3 - ds toute tes classe Dlg quand tu veux recuperer ou modifier une valeur de ton objet CVar..

Code :
  1. CVariableElec* pVariable = AfxGetApp()->m_pVariableElec;
  2.      .... a partir de la tu peux utiliser l'objet, et ca reste ds l'objet uniquement definie ds l'app donc commun a tout le monde ...


 
3 bis - ne pas oublier d inclure le VariableElec.h ds tt les cpp de tes dialog
 
 
 
Et pour terminer, apres desole mais j ai pas l intention de t apprendre la programation objet (car la c mm pas des MFC mais du C++ tout court), donc va faloir lire un peu des bouquins et tester par toi meme sur un petit projet a cote pour tester tes choix technologique.
Des renseignements sur comment faire en gros ou depanage ok, mais bon on est pas paye a ta place ;)
 
 
Edit:
4 - dans le destructeur de ton App :D (chut personne avait vu qu il manquait ;))

Code :
  1. if (m_pVariableElec)
  2.         delete m_pVariableElec;


Message édité par VisualC++ le 11-04-2003 à 14:34:14
Reply

Marsh Posté le 11-04-2003 à 14:30:50    

backdafuckup a écrit :


 
ca veut dire koi TT ???


 
que tu pourras plus poster :o
 

backdafuckup a écrit :


Et en quoi est ce mal de poser une question, et surtout de demander une réponse ??


 
c'est mal de remonter un topic plusieurs fois à de très courts intervalles, c'est tout
si tout le monde fait pareil imagine un peu le bordel que ce serait :p
 

backdafuckup a écrit :


Donc, je te pose la question, tu penses que ca me ferait du bien d'etre TT (je sai meme pas ce que c, pas plus que je ne sais ce qu'est un troll, et pourtant c écrit partout dans le forum) ou bien d'etre BAN (ca je sais, on me l'a déja fait... j'en ai marre des télétubbies...).


 
TT = teletubbies justement :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-04-2003 à 14:38:21    

antp a écrit :


 
que tu pourras plus poster :o
 
 
 
c'est mal de remonter un topic plusieurs fois à de très courts intervalles, c'est tout
si tout le monde fait pareil imagine un peu le bordel que ce serait :p
 
 
 
TT = teletubbies justement :D
 


 
message recu.... je ferais attention (est qu'une simple réponse est considérée comme un up volontaire et malsain ????)
Mais c'est quoi un troll ?

Reply

Marsh Posté le 11-04-2003 à 14:38:27    

je pense qu'avec les derniers conseils de vicualC++ tu as tout en main pour realiser ton projet correctement.
 
bonne chance

Reply

Marsh Posté le 11-04-2003 à 14:56:42    

2 - dans le constructeur de ton App
Code :
      m_pVariableElec = (CVariableElec*) new CVariableElec;
Le compilo me dit qu'il faudrait un opérateur = défini....
Je vais continuer à chercher.... la solution doit etre simple pourtant...
 
edit:  
ya juste encore un tout tit truc de rien du tout, promis après j'arrete de vous embeter...
VisualC++ (l'homme) m'a dit de mettre la déclaration de mon objet dans WinApp. Betement, je me suis dit qu'il fallait le mettre dans la WinApp a laquelle j'avais accès... C'est A dire MonAppliApp.h puisqu'elle dérive de CWinApp... Mais non.
Déclarer mon objet dans WinApp voudrait il dire modifier le fichier AFXWIN.H qui contient la déclaration de WinApp ? ca me parait un peu gros, et surtout inutile (enfin pas intelligent quoi...). Est ce qu'on pourrait me donner juste cette précision svp, après je serais sage... promis, craché !  :ange:


Message édité par backdafuckup le 11-04-2003 à 15:01:50
Reply

Marsh Posté le 11-04-2003 à 15:00:19    

VisualC++ a écrit :


Code :
  1. m_pVariableElec = (CVariableElec*) new CVariableElec;




 
le cast est totalement inutile.


Message édité par Tetragrammaton IHVH le 11-04-2003 à 15:00:59

---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 11-04-2003 à 15:07:32    

Vi mais ca fait beau :D
 
 
 
Euh ds le afwin.h ... mamannnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
 
- Soit tu fais un .h et un .cpp avec ton objet CVariable elec et tu inclus le .h ds CWinapp.h et apres ds les .cpp de tes Dlg
 
- Soit tu fais ds le .h de ton CWinApp

Code :
  1. class CVariableElec {
  2. };
  3. le reste de la declaration
  4. class CTonApp : CWinApp {
  5. };


et ds ce cas le app.h est normalement inclus ds tt les .cpp donc pas besoin de l'inclure de nouveau pour avoir acces a la declartion de l'objet.

Reply

Marsh Posté le 11-04-2003 à 15:20:53    

[:ruisseau de larmes]  
 [:violito]  [:gunblade]  :(  :(  :cry:

Reply

Marsh Posté le 11-04-2003 à 15:23:56    

VisualC++ a écrit :

Vi mais ca fait beau :D
 


 
au contraire, c'est moche. En plus, c'est du C. Quand un cast est necessaire, il faut faire un static_cast<>().


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 11-04-2003 à 15:25:25    

backdafuckup a écrit :

[:ruisseau de larmes]  
 [:violito]  [:gunblade]  :(  :(  :cry:  


 
ben quoi c'est clair, ca va pas?

Reply

Marsh Posté le 11-04-2003 à 15:31:11    

polo021 a écrit :


 
ben quoi c'est clair, ca va pas?


 
non c bon, je vais trouver tout seul, faut que je me débrouille un peu.. VisualC++ a raison, vous etes pas payé à ma place, et plus j'apprends tout seul, plus ca me fera de bien...
Merci en tout cas
 
[:backdafuckup]

Reply

Marsh Posté le 11-04-2003 à 15:31:44    

Tetragrammaton IHVH a écrit :


 
au contraire, c'est moche. En plus, c'est du C. Quand un cast est necessaire, il faut faire un static_cast<>().


 
Je dit pas mais euh alors tu lui expliques le cast et le static et autre, moi la ca va j ai donne ;)

Reply

Marsh Posté le 11-04-2003 à 15:48:45    

[:gunblade]  [:ruisseau de larmes]  
 
C nul le C++..... ca pue..

Reply

Marsh Posté le 11-04-2003 à 16:02:55    

oui, mais c'est pas en cours qu'il m'ont appris ce que c t que CWinApp, ni comment faire que mon objet soit accessible par toutes mes classes. Ca, j'ai du mal à le deviner vois tu....  :fou:  
 
Ca commence à me rendre dingue cette histoire.... [:violito]

Reply

Marsh Posté le 11-04-2003 à 16:19:22    

mais c'est pas ca que j'ai demandé...
J'ai juste demander comment faire pour qu'un objet d'une classe soit accessible par toutes les autres... Ben on m'a donné une réponse, c mon pb si je n'arrive pas à l'appliquer. On me parle de CWinApp, j'ai trouvé une classe qui en dérivait, mais à partir de la, j'arrive à rien... donc j'ai mis en commentaire tout ce que j'avais fait, et je ferais ca une autre fois....
Quand j'aurais un cerveau, certes, mais pour l'instant, j'y arrive pas, donc je passe à autre chose maintenant...

Reply

Marsh Posté le 11-04-2003 à 16:32:23    

Ca y est, j'ai trouvé....
Mais ct pas de ma faute...
Pour avoir accès à la variable, on m'avait dit :  
 

Code :
  1. CVariableElc * pVariable = AfxGetApp()->m_pObjElc;


 
mais on me disait que m_pObjElc n'était pas membre de CWinApp...
 
Alors j'ai bidouillé ca :  
 

Code :
  1. CVariableElc * pVariable = AfxGetApp()::m_pObjElc;


 
Et la ca marche  :heink:  
 
Mystère............

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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