Visual C++ - kako koristiti MFC kontrole?

poruka: 110
|
čitano: 14.064
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
moderator
online
Re: Visual C++ - kako koristiti MFC kontrole?
jurluk kaže...
članovima pristupam preko drugih funkcija

Preko kojih drugih funkcija? Koje pozivaš iz func? Jer ako ih ne pozivaš iz func, onda je jasno da koristiš neinicijalizirani pointer, odnosno pointer ti pokazuje na prostor koji nije namijenjen njemu. Zaboravi na malloc - koristi new.

17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

jooj, sad vidim šta sam napravio. toliku strku sam napravio zbog ničega.

 

uglavnom, prvo pronađem koliko mi treba veliko polje. pa kad dalje radim ako se dogodi greška prilikom učitavanja, program odma "odbaci" te podatke koje učitava, pa automatski ima jedan element polja manje. i kad završi to učitavanje funkcija vrati koliko zapravo ima učitanih elemenata, a ne koliko sam prije toga mislio da će biti. i ja sam u kodu alocirao memoriju tek nakon te radnje sa tim novim brojem elemenata. sad vidim koju sam glupost napravio. pa sam prebacio alokaciju odma kad sazna koliko mu treba elemenata, pa i ako se dogodi koja greška prilikom učitavanja taj jedan ili više elemenata će se pojaviti kao višak u memoriji ali to programu ne prestavlja nikakav problem

 

ispričavam se zbog strke, my bad {#}

Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

.

Life is Computers, Tobacos, Women, Trucks, you live better?
Poruka je uređivana zadnji put sri 3.9.2025 17:58 (royalhero).
17 godina
moderator
online
Re: Visual C++ - kako koristiti MFC kontrole?
royalhero kaže...
mbaksa kaže...

Zaboravi na malloc - koristi new.

Zašto?, a kako bi realocirao?, ne koristim new, ali vidim da je lakše, pa kako bi mogao realocirati memoriju, osim realloc?

Pitanje ti je besmisleno. Alokacija memorije nije svrha sama sebi.

14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
.
Life is Computers, Tobacos, Women, Trucks, you live better?
Poruka je uređivana zadnji put sri 3.9.2025 17:57 (royalhero).
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
royalhero kaže...

Ok!, ali nije mi jasnop šta koristim, new za alociranje, i delete za oslobađanje memorije?

Malloc nije dobro koristiti za alociranje objekata u C++u. Ako te brine realokacija onda možeš koristiti vektore i dinamički proširiti ili suziti vektor (polje) po volji.

 

Mala usporedba malloc i new u C++u:

 

#include <iostream>
using namespace std;

class myType{
    public:
       myType(){ cout << "Kreiran!\n"; }
       ~myType(){ cout << "Unisten!\n"; }
};
int main(){
    myType *obj1, *obj2;

    obj1 = (myType*)malloc(sizeof(myType));
    free(obj1);

    obj2 = new myType;
    delete obj2;
    return 0;
}

 

Pokreni program pa ćeš vidjeti rezultate.

 

17 godina
moderator
online
Re: Visual C++ - kako koristiti MFC kontrole?
royalhero kaže...
Ok!, ali nije mi jasnop šta koristim, new za alociranje, i delete za oslobađanje memorije?

Već kad pitaš za "alociranje memorije", jasno je da si skrenuo u krivu ulicu. S obzirom da si početnik, reci što hoćeš napraviti pa će ti već netko reći kako. Što hoćeš napraviti, dakako, ne odnosi se na "alocirati memoriju". Zaboravi da si ikad čuo za izraz "alocirati memoriju", jer ne shvaćaš što taj izraz znači. Ponavljam - Alokacija memorije nije svrha sama sebi.

17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

imam "problem" sa jednim svojim programom da neće radit na windowsima sa korisnikom čije korisničko ime u sebi sadrži č, ć, đ i sl. 

naime, program radi tako da pronađe "appdata" mapu korisnika i tu stvori novu mapu u koju sprema razne podatke. pretpostavljam da je onda problem u tim hrvatskim slovima, jer program barata sa tim stringovima. jel se moze nekako "natjerati" program da radi i sa našim slovima?

Atomska bubamara | edomovina.blog.hr
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

Jel koristiš Unicode? To ti piše na prvoj stranici od propertiesa od projekta. Pod character set.

17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

hmm, ne vidim to nigdje :/

btw, koristim embarcaredo rad studio, a ne visual studio

 

ima jedino ovo

Atomska bubamara | edomovina.blog.hr
 
0 0 hvala 0
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

C++ Builder 2009+ podržava unicode. Ako ti treba string tog tipa onda je to UnicodeString. Inače provjeri da li se ime korisnika (accounta) točno dohvaća i to je to. Ne vidim tu problema osim u možda tvojoj implementaciji.

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put ned 4.12.2011 22:18 (TracerCPP).
Moj PC  
0 0 hvala 1
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

bah, ne paše mi to
već sam skombinirao nešto drugo

Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

Ubuduće koristi UnicodeString od samog početka i nećeš imati problema. Zaboravi C stringove i sl. stvari. Ionako ti UnicodeString dopušta diretkne pretvorbe metodama c_str, t_str, w_str ako ti to baš treba ili čak i u brojevne tipove; ToInt, ToDouble itd.

http://www.chess.com/livechess/profile/Tracer1808
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

zapravo c_str vraća pokazivač na wchar_t, a ne na "obični" char kao što je to kod ansistringa, a meni treba obični char *

ali to sam onda riješio ovako

npr

UnicodeString str;

const char *a;

a = AnsiString(str).c_str();

i sve radi. no dobro

 

konkretno imam ovaj problem, to sam sad uočio. "Đ" iz korisničkog imena on učita kao "Ń"

ali idem sad spavat, pa ću to ujutro riješit

Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Ako ti treba obični char* onda koristi t_str. No svejedno, to ne možeš nikako uspješno pretvoriti u char* kada on nije unicode i ne može spremiti naše znakove s kvačicama itd. Zato uopće zaboravi char* ako ti treba puni unicode i radi sve direktno preko UnicodeString-a.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
1 0 hvala 1
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

imam problem s time, ne znam jel to do windowsa ili do čega, ali jednostavno ne radi

 

privremeno sam napravio profil na windowsu imena "Đuro" baš da isprobam ovo

i evo primjer koda koji se izvršava

 

UnicodeString str = std::getenv("appdata");
//s tim dobijem appdata mapu trenutnog korisnika
//konkretno trebao bi dobiti "C:\Users\Đuro\AppData\Roaming"

str += "\\blabla";
//blabla nadodam na onaj string odozgo

mkdir(AnsiString(str).c_str());
//i ovdje napravim mapu blabla u mapi roaming
//znači C:\Users\Đuro\AppData\Roaming\blabla

UnicodeString file = str + "\\file.txt";
//C:\Users\Đuro\AppData\Roaming\blabla\file.txt

FILE *fin = fopen(AnsiString(file).c_str(), "w");
fprintf(fin, "blabla\ntest\nžđđščć\n");
fclose(fin);

 

ali problem je što ja gore na početku dobijem "C:\Users\Ńuro\AppData\Roaming", a ne "C:\Users\Đuro\AppData\Roaming"

 

edit:

 

a kad "ručno" u programu stvaram novu mapu koja sadrži Đ u sebi, normalno ju stvara i normalno otvara datoteku koja se nalazi u njoj

 

edit2:

 

a jesam glup. sad sam skužio. problem je u getenv(), ta funkcija vraća char* pa zato ne ne radi sa "Đ"
jel ima koji drugi način da dođem do te mape?

Atomska bubamara | edomovina.blog.hr
Poruka je uređivana zadnji put pon 5.12.2011 21:40 (jurluk).
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

std::getenv vraća char* i zato ne radi. Probaj ovako:

 

UnicodeString str = _wgetenv(L"appdata");
ShowMessage(str);

http://www.chess.com/livechess/profile/Tracer1808
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

skužio sam i sam :D

ovako radi. hvala! ;)

Atomska bubamara | edomovina.blog.hr
17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

pa ja ću poludit, zadnjih sat ipo se patim sa glupošću

 

imam formu na kojoj je edit polje iz kojega isčitam cijeli broj i spremim ga u numberOfBytes. u kodu imam petlju koja se izvodi totalLines puta, odnosno toliko redova zapisuje nešto u datoteku. a gdje je totalLines = ceil(numberOfBytes/(float)16). a gotovo uvijek unostim broj koji je djeljiv sa 16. odma na početku programa u edit polj stoji broj 4096, što znači da se ta petlja treba izvodit 256 puta.

 

evo samo dio koda

 

int totalLines = ceil(numberOfBytes/(float)16);

ShowMessage("totalLines: " + IntToStr(totalLines));
//da vidim jel dobar broj, i uvijek bude dobar
//tako isto imam i za numberOfBytes i sve je ok

int line = 1;

while(line <= totalLines){

    ShowMessage("line: " + IntToStr(line));

    if(line==totalLines && numberOfBytes%16!=0){
       //nešto se izvodi, ali nema nigdje break niti se dira "line"
       //edit: da objasnim sto se ovdje radi
       //u ovom ifu i u onom elseu su for petlje
       //ako je onaj uvjet gore tocan, znaci ako dode u zadnji red,
       //a ukupan broj elemenata nije djeljiv sa 16,
       //onda for petlja ne ide do 16, nego do ostatka cjelobrojnog dijeljenja
      
       for(int i=0; i<numberOfBytes%16; i++){}
    }

    else{
       //ako je uvijet gore netocan, znaci da ili nije jos u zadnjem redu, ili je
       //u zadnjem redu ali je ukupan broj djeljiv sa 16 pa svejedno petlja ide do 16
      
       for(int i=0; i<16; i++){}
    }

    ++line;
}

 

 

problem je što program radi samo kad unesem broj 4096. kad unesem bilo koji broj, djeljiv ili nedjeljiv sa 16, on ispiše samo jednu liniju i petlja se prekida

probao sam sa for petljom, do-while i sad sa while i ništa neće. jednostavno ne vidim gdje je problem

 

probao sam mjenjati i uvijet, samo < ili != i šta ja znam i nikako neće

Atomska bubamara | edomovina.blog.hr
Poruka je uređivana zadnji put uto 20.12.2011 18:27 (jurluk).
 
0 0 hvala 0
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Step Over (F8) i Trace Into (F7) pa izvršavaj program liniju po liniju i gledaj vrijednosti izraza. Ovako je teško reći u čemu je problem jer si zakomplicirao logiku programa.

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put uto 20.12.2011 19:23 (TracerCPP).
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

već sam htio sa debuggerom, al mi nije radio. nije mi bilo jasno zašto, a onda sam vidio da mi je aktivna release konfiguracija {#}

 

no dobro. problem leži ovdje. ovo je kod koji se izvršava

 

else{
    sprintf(cijeliString, "10%04X00", adress);

    for(int i=0; i<16; i++) {

       int hex = rand()%256;
       sprintf(temp, "%02X", hex); //nakon izvrsavanja ove naredbe, totalLines iz cista mira postane nula, zasto?!
       strcat(cijeliString, temp);
       ProgressBar1->Position += 1;
    }
}

 

znaci ako je 4096, sve je u redu. nema ovog problema. cim je neki drugi broj, djeljiv ili nedjeljiv sa 16, u tom dijelu totalLines postaje nula

Atomska bubamara | edomovina.blog.hr
17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

"riješio" sam ovo tako da sam dodao još jednu varijablu koja poprimi vrijednost od totalLines, pa dalje baratam s njom. i kad totalLines postane nula, s ovom dalje normalno radim. ali problem je što sa debug konfiguracijom program radi super, nema nikakih problema. a sa release ne radi. ne znam zašt je tako...

Atomska bubamara | edomovina.blog.hr
 
0 0 hvala 0
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Release je i poznat po takvim čudnim greškama ;) Inače, ako radiš update pozicije progressbar-a onda bi trebao nakon toga pozvati

 

Application->ProcessMessages();

 

da se taj update odmah vidi.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 1
17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

a jbt poludit cu!!!

sve je dobro, samo zbog release-a ne radi

 

ne radi ono inkrementiranje line-a

ni line++, ni ++line, ni line+=1

 

za popi*dit!!!

{#}{#}{#}

 

edit:

i mjenjanje pozicije na progressbaru radi i bez toga

Atomska bubamara | edomovina.blog.hr
Poruka je uređivana zadnji put uto 20.12.2011 22:09 (jurluk).
 
0 0 hvala 0
17 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

poludit cu! pocet cu razbijat oko sebe kolko me ovo nervira

 

kako moze nesto utjecat na nesto drugo s cim nema nikakve veze!? jos stavim const ali se svejedno promjeni na nulu

 

kako to objasnit?!?!

 

{#}{#}{#}

Atomska bubamara | edomovina.blog.hr
 
0 0 hvala 0
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Liniju po liniju pa gledaj jer iz ovoga se ne vidi ništa, a i taj numberofbytes mi je sumnjiv. I umjesto da koristiš C pristup rada s datotekama pogledaj malo TStream klase tj. TFileStream i njene mogućnosti.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
a kad sam naucio radit na taj nacin s datotekama, pa mi je lakse. al pogledat cu :)

al nije mi jasno da debug i release ne rade istu stvar. odnosno debug radi dobro, a release ne, sto mi nikako ne ulazi u glavu. programcic je skroz gotov, radi ko podmazan, samo je jos to problem :/
Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Pokušaj i clean project pa kompletni build.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
ma radio sam i to, ali ne pomaze
Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

I što sad? Ostavi projekt u debug-u i to je to.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice