strings i win32 api?

Tags:    c++

Er ret ny i win32 api programmeringen, men har læst mig igennem damb.dk's dialog tutorial og tror jeg er ved at komme lidt efter det.

Men hvordan ændrer jeg så jeg også kan manipulere med ord og ikke kun tal?

Når jeg ændrer int first; til string first; får jeg følgende fejl kode:

cannot convert `std::string' to `UINT' for argument `3' to `BOOL SetDlgItemInt(HWND__*, int, UINT, BOOL)'

Hvad gør jeg (forkert)?




Du bruger SetDlgItemText.
Hvis first er en std::string:

std::string first = "Some Text";
SetDlgItemText(hwndDlg, FirstEditId, first.c_str());




Ahh, fedt. Og tak for det hurtige svar. Men hvad så hvis jeg vil have den til at printe noget der er blevet skrevet i en af mine edit controls, og ikke bare et "konstant svar", hvis du forstår.

Altså: jeg har min edit control ID: "FirstEditID" og bruger så

std::string First = GetDlgItemText(hwndDlg, FirstEditId, 0, FALSE);

til at kalde teksten fra denne. Det vil jeg så gerne kunne manipulere/printe ved

std::string Result = First;
SetDlgItemText(hwndDlg, ResultEditId, Result.c_str());

Men der sker ikke noget. Det virker med integers så tror ikke det er mine knapper det er galt med. Giver det mening? kan du hjælpe?



Indlæg senest redigeret d. 11.12.2007 22:41 af Bruger #12958
Det går galt med:
std::string First = GetDlgItemText(hwndDlg, FirstEditId, 0, FALSE);

Du kan ikke bruge GetDlgItemText på den måde, den skal kaldes med et almindeligt char arry. I stil med:
char Buffer[256];
GetDlgItemText(hwndDlg, FirstEditId, Buffer, sizeof(Buffer));

Du kan så efterfølgende lave en std::string ud fra bufferen:
std::string Result = Buffer;



Perfekt! Tak skal du have!

Jeg vender tilbage når jeg får flere problemer.. ;)



Okay, der gik lidt kortere tid end jeg havde håbet. Men et sidste spørgsmål, så skal jeg nok finde nogle andre at genere:

Hvordan manipulere jeg nu den her Buffer char jeg har fået lavet? Altså fx køre den igennem et for loop og klistrer nogle flere bogstaver på eller noget.. ?



Det er lettest at lave den om til en std::string:

std::string Result = Buffer;

Så kan du tilføje noget til strengen:
Result += " At home";

Og du kan udskifte alle 'h' med 'H':
for(int i = 0; i < Result.size(); i++)
if(Result == 'h')
Result ='H';

Men det er vist på tide at du tager et grundkursus i C++





Og du kan udskifte alle 'h' med 'H':
for(int i = 0; i < Result.size(); i++)
if(Result[ i] == 'h')
Result[ i] ='H';


Sorry Bertel...ændrede lige lidt i din kode så indexes ser rigtige ud :-)



t