07. februar 2006 - 23:41Der er
13 kommentarer og 1 løsning
Talbehandling i MFC
Prøver at forstå talbehandling i VisualC++ 6.0. Der er desværre meget lidt i bøgerne (practical Visual c++ 6) har ikke meget held med søgning på nettet, men fandt dette eksempel: 4 editboxe, 1 calculate knap. Markedsprisen samt tax indtastes. Ved tryk på Calculate bliver tax amount samt nettoprisen undført.
Så til spørgsmålet: Er det nødvendigt at det skal være så besværligt at regne med editboxe i C++ ? Er der en nemmere måde at f.eks addere to Editboxe og vise resultatet i en tredje.
Fik forklaring på atof i MSDN (convert streng til value) Men ved ("$.2f") der faldt det sidste hår af!!! Der var ingen forklaring med eksemplet (typisk) jpk hjalp mig meget i et indlæg for et par dage siden, ellers havde jeg ikke fundet en fejl i eksemplet på nettet.
Håber nogen forbarmer sig over mig igen, har købt Microsoft flag og benzin.
Er du sikker på at det ikke er %.2f ? I så fald bør den formatere et decimal tal med to cifre efter ./,
Du kan lave din egen DDX_Double funktion, det er ikke specielt svært, og så kan du direkte associere en double med en edit box, således at UpdateData læser fra din double og skriver til din double.
(I øvrigt anbefaler jeg ikke at lære MFC, det er ikke kønt designet, og er lettere outdated.)
Du har ret $%.2f, beklager (skriver koden i context, da uendelige link løkker er mit speciale :) ) Laver normalt programmer i Visual Basic, men vil gerne lære C++ i samme miljø, hvilke andre muligheder har jeg? er træt af at skrive C++ sætninger i DOS boxe, her i MFC kan jeg sammenligne med tilsvarede kode i VB, det var pointen. (Er nybegynder) kan nok ikke forstå hvorfor man ikke kan skrive "indhold editbox1 + indhold editbox2 vises i editbox3" DDX_Double funktion ved jeg desværre ikke hvad er. Vil være meget taknemmelig, hvis du kunne omskrive ovenstående, som du mener er nemmest, et eksempel er mere end tusind ord. Tak for at du gider hjælpe. Peter
DDX_Text og DDX_whatever er MFC extensions til at hente data fra en control til en variabel og skrive fra en variabel til en control. Prøv at kikke i din DoDataExchange
Der er ikke nogen DDX_Double funktion så hvis du vil have en må du lave den selv (eller få en til at lave den).
Man kan ikke skrive editbox1 = editbox2 + editbox3 i C++ fordi C++ ikke har automatisk typekonvertering.
Jeg har selv brugt MFC, men er holdt op, det er for bøvlet.
Der findes ikke ret mange alternativer :-( Man kan bruge BorlandC++ Builder, men det er ikke ret meget bedre end MFC. Man kan bruge .net, men C++ i .net er ikke rigtig C++, og så er der ikke så meget idé i at bruge C++ (vælg C# i stedet). Nogle GUI biblioteker har programmer til at lave applikationer med drag&ddrop men jeg har ikke prøvet dem.
--> bertel Der er gansske rigtig ikke nogen DDX_Double, men DDX_Text har en del overloads, også en som ta'r en double.
Laver man 3 membervariabler, m_Val1, m_Val2 og m_Val3, kan man godt:
m_Val3 = m_Val1 + m_Val2;
--> Peter Har du fundet ud af hvordan du laver membervariable for dine edit-felter? Understående bliver automatisk oprettet hvis du laver 3 membervariabler med navnene m_Val1, m_Val2 og m_Val3 af typen double.
--> bertelbrander, jeg skal bruge C++ til andet end windows programmer, håbede bare at det var nemmere at lære, når man kan sammenligne med VB kodning, hvis jeg laver ovenstående program i en console med cin og cout er det nemt nok, men at bruge Editboxe og knapper er mere end besværligt, må bare lære at forstå syntaxen. Er atof ikke en typekonvertering? sådan forstod jeg det på MSDN ? Kan jeg efter din mening bruge Visual C programmet til C# (kan vælges under installeringen)eller anbefaler du andre programmer?
-->jpk membervariabler laver jeg i Class Wizzard, f.eks (Control ID)IDC_MARKED_PRICE (type) CString (Menber) m_MarkedPrice, er dette korrekt? Det er konverteringen fra streng til tal der giver mig konstant hovedpine. Tak for dit eksempel, det er da til at forstå, et lille spørgsmål (eller 2) er der en bestemt grund til at de 3 members deklareres i en headerfile? I VB bruges val til at fortælle at det er tal, er det det samme i C++ ?
Utroligt at talbehandling i MFC er så forsømt i bøgerne.
jpk, jeg brugte programmet i første indlæg som eksempel, der er det CString der er brugt. Troede at brugen af "atof" var en genvej, da hele koden skrives i button dialog, var vist et vildspor.
Ved at bruge dit forslag, har du selvfølgelig helt ret. Kaster mig lige over et par hundrede sider med Class læsning, smid lige et svar, så får du fred i 14 dage :) Peter.
MFC Class Wizzard: Class name: CTaltest1Dlg, Messages: DoDataExchange er i bold, Object IDs: CT altest1Dlg.
Dette havde programmet selv skreveti taltest1Dlg.cpp: CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_Val1); DDX_Text(pDX, IDC_EDIT2, m_Val2); DDX_Text(pDX, IDC_EDIT3, m_Val3);
Så gik jeg ind på taltest1Dlg.h for du skrev: "I din dialogs headerfil (.h): 3 members ... public: double m_Val1; double m_Val2; double m_Val3;"
De var der ikke, så jeg troede jeg selv skulle indføre dem.
Tror kæden er ved at hoppe af for mig, jeg mangler den fundamentale forståelse af Classes og deres opbygning, som sagt så må jeg igang med bøgerne igen, tak for du lagde ører til mine spørgsmål. Peter
Ser det nu, kiggede kun under taltest1Dlg.h : headerfile. Under CTaltest1Dlg : public CDialog //Construction er de 3 members. Tror jeg var fixeret på at man selv skulle skrive linierne. Smider mig endnu engang i støvet, det er bare kanon, nu virker det! Tak for hjælpen Peter
Jeg har før brugt wxWidgets og det virker fornuftigt. MinGW er også en god compiler (omend en anelse langsom). Jeg har ikke brugt visualwx men det ser fornuftigt ud.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.