Visual C++ - kako koristiti MFC kontrole?

poruka: 110
|
čitano: 14.062
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
al onda kontrole imaju stari izgled, kao na win 95 ili 95, a ne ovaj fensi-šmensi kao na sedmici :/
Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

Debug/release nemaju veze s time. U project options/Application provjeri da li ti je uključen "Enable runtime themes".

 

Inače, pokušaj si nabaviti TMS Component Pack. Imaš preko par stotina fensi-šmensi kontrola, pa čak i one koje se koriste na MAC-u, Win7 kontrole (koje čak tako izgledaju i na xp-u) itd.

http://tmssoftware.com/site/tmspack.asp?s=misc&sbp=414

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

da, znam da nema veze s time, ali jednostavno s ovim projektom stalno imam nekih problema. pokrenem debug, ali ne u debugging modu, i budu normalne kontrole. zatvorim ga i ponovo pokrenem, pa budu stare. onda samo uđem u opcije projekta i samo kliknem ok, pokrenem debug i opet je sve ok. ugasim, pa ponovo pokrenem i opet je stari izgled. bas nesto serucka :/

 

no dobro, glavno da je sad gotov. ostavio sam ga onda u debugu, kad već ebeni release ne radi

pa evo, voila{#}{#}

Atomska bubamara | edomovina.blog.hr
17 godina
moderator
offline
Re: Visual C++ - kako koristiti MFC kontrole?
jurluk kaže...

da, znam da nema veze s time, ali jednostavno s ovim projektom stalno imam nekih problema. pokrenem debug, ali ne u debugging modu, i budu normalne kontrole. zatvorim ga i ponovo pokrenem, pa budu stare.

Nisam baš pažljivo čitao... Ako govoriš o XP kontrolama, izgled kontrola ti ovisi je li Windows XP manifest uključen u .exe datoteku. U krajnjem slučaju ti možeš u mapi s .exe datoteku uvijek držati imeprograma.exe.manifest pa će ti se program, kako god bio buildan, pokretati s Win XP kontrolama. Kako ćeš do .manifest datoteke? Potraži u Program Files, iskopiraj i promijeni ime.

 

BTW Win XP teme zaista mogu uzrokovati probleme. Naime, kad njih koristiš, koristiš novije verzije sistemskih .DLL-ova koje možda nisu 100% kompatibilne sa starijima. Sjećam se problema sa starim Delphijem (5?) - program nije radio s ListViewom ili tako nekom kontrolom ako su se koristile Win XP kontrole - loše je ta komponenta bila implementirana u VCL-u. Kasnije su to, naravno, ispravili.

 

 

Što se tiče Debug/Release problema... Ako nije pitanje manifesta, onda je pitanje neke druge opcije (optimizacije?) - jednostavno počni uključivati za Debug opcije koje su uključene u Releaseu, jednu po jednu. Tako ćeš doći do one zbog koje ti program ne radi dobro.

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

Manifest je prije trebalo uključivati (dodati manifest datoteku ili manifest komponentu na formu) no u novijim verzijama C++ Buildera/Delphija više nije potrebno. On koristi verziju 2010 gdje to ne treba, no očito je neki problem s release konfiguracijom pa mu automatski isključi manifest tj. "Enable runtime themes" opciju.

http://www.chess.com/livechess/profile/Tracer1808
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?
zapravo koristim XE2, ako to ima ikakve veze
Atomska bubamara | edomovina.blog.hr
14 godina
neaktivan
offline
Visual C++ - kako koristiti MFC kontrole?

Nema. Bitno da je starije od verzije 2006.

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

pa ja jednostavno ne mogu vjerovat. obična je*ena for petlja ne radi. i se ne inkrementira. za popi*dit!!!!!!1

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

kako pozvati browse for folder dijalog koji ima i make new folder button?

 

jer npr ovako pozivam dijalog bez tog gumba SelectDirectory(Caption, Root, Directory);

 

a treba mi ovakav dijalog

 

guglao sam i vidio sam neke varijacije, ali dobijem onaj "starinski" izgled, a ne ovaj koji zelim :/

 

edit:

i mozda ne bi bilo lose ovaj "MFC" u naslovu teme promijeniti u "VCL"

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

#include <FileCtrl.hpp>

TSelectDirExtOpts Ops;
UnicodeString Directory;

Ops << sdNewUI << sdNewFolder;
if(SelectDirectory("Odaberite folder", L"C:\\", Directory, Ops) == true){
    ShowMessage(Directory);
}

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

kako bih najlakse mogao cropati sliku?

 

znači da zadam ili u postotcima ili u pixelima kolko treba cropat, i na koji nacin, znaci da gotova slika bude od gornjeg desnog coska, od gornjeg lijevog, od sredine itd itd...

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

Najlakše preko piksela. Učitaj sliku u TImage, podesi AutoSize i Strech propertie po volji, i kako mijenjaš Width i Height TImage komponente time ujedno djeluješ na samu sliku.

Moj PC  
0 0 hvala 1
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

to baš i ne pomaže...

 

ali nakon malo mukotrpnijeg guglanja sam mašao primjer koda koji sam onda promjenio za svoje potrebe. evo originalni primjer ako nekad nekome zatreba

 

#include <jpeg.hpp>
TJPEGImage *jpeg = new TJPEGImage();
jpeg->LoadFromFile("c:\\tamibig.jpg");
//jpeg->DIBNeeded();
TImage *  = new TImage( this);
dest->Width = 400;
dest->Height = 550;
TImage *src = new TImage( this);
src->Picture->Bitmap->Assign( jpeg);
TRect sr(50,50,250,275);
//src rec - the area you want to cut from the source
TRect dr(0,0,500,550);
//dest rec - the area you want to paste into, usually the destination TImage size
dest->Canvas->CopyRect(dr, src->Canvas, sr);
dest->Picture->Bitmap->SaveToFile("c:\\test.bmp");
//save the resulting cropped bitmap
delete src;
delete dest;
delete jpeg;

 

sad mi treba nešto drugo :)

kad preko browse for folder dijaloga odaberem željeni folder, kako pronaći sve jpg-ove iz njega i dodati ih u listbox i imagelist? i kako iz open dijaloga, kad odaberem više jpg-ova, isto ih dodat u listbox i imagelist?

 

edit: zapravo znam kako dodat u imagelist, trebam samo kako dodat u listbox?

 

jer npr, ako odaberem više datoteka, ovako se dodaje samo jedna, a ja trebam sve odabrane

 

if(OpenDialog1->Execute())
     ListBox1->AddItem(OpenDialog1->FileName, Sender);

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

Pa u tom codu koristiš ništa drugo već TImage kao source komponentu {#}. Samo što je dinamički alocirana. No svejedno...

 

Kod OpenDialog-a u Options omogući AllowMultiSelect. Zatim code

 

for(int i = 0; i < OpenDialog1->Files->Count; i++)
    ListBox1->Items->Add(OpenDialog1->Files->Strings[i]);

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

isprobavam nešto sa SDI aplikacijom i imam jedan problem. imam 2 forme, znači onu glavnu i još jednu običnu. klikom na file->new na glavnoj formi želim da se ta druga forma stvori unutar ove glavne forme. ali ona se pojavi čim pokrenem aplikaciju, što nije ono što ja želim. postavio sam FormStyle na fsMDIChild, šta još treba? ako to uopće ide tako... :/

 

edit: update problema

 

išao sam ispočetka. napravio sam obični vcl forms projekt. napravio dvije forme. jednoj FormStyle postavio na fsMDIForm, na drugoj nisam ništa dirao, ostalo je fsNormal. zatim sam dodao sljedeći kod za file -> new na glavnom meniju.

 

    TimpForm *frmChild = new TimpForm(Application);

    frmChild->Caption = L"Untitled";
    frmChild->FormStyle = fsMDIChild;

i sve je bilo u redu. pri pokretanju glavna forma je bila čista dok nisam dodavao druge klikom na new.

bilo je dobro dok drugoj nisam mjenjao FormStyle. i nakon toga, na šta god da ga postavim, kod pokretanja se pojavi unutar glavnog prozora. bez ikakvog razloga, nisam ništa dirao, samo sam mjenjao FormStyle i ponovo ga vratio na staru vrijednost i opet nije dobro. zašto dolazi do toga? kako se to može riješit?

 

 

Atomska bubamara | edomovina.blog.hr
Poruka je uređivana zadnji put čet 2.2.2012 20:21 (jurluk).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

Mislim da bih ja tebi trebao početi naplaćivati support {#}

 

Uglavnom.. ako želiš jednu formu unutar druge ne trebaš ništa dirati stilove već definirati koja je kojoj parent (roditelj);

 

Form2->Parent = this;

 

..i onda Show. Ne možeš u ovom slučaju koristiti ShowModal.

17 godina
neaktivan
offline
Problem sa loadanjem bitmape

trebam dobit rgb vrijednosti pixela sa slike. dva dana sam se mučim sa tim problemom i nakon malo razmišljanja i guglanja, dobio sam kod koji izgleda ovako

 

    TBitmap *bm = new TBitmap();
    bm->LoadFromFile(Edit1->Text);
    TColor c = bm->Canvas->Pixels[0][0];
    int r = GetRValue(c);
    int g = GetGValue(c);
    int b = GetBValue(c);
    ShowMessage("r: " + String(r) + "\ng: " + String(g) + "\nb: " + String(b));
    delete bm;

naizgled je sve dobro, samo što se kod LoadFromFile baci iznimka EInvalidGraphic

a ne znam zašto ju baca, obična jpg datoteka. neće ni sa bmp, png, gif itd

 

EInvalidGraphic is raised when
An application attempts to load a file that is not a valid bitmap, icon, metafile, or user-defined graphic type into a picture.
An application attempts to load a file with an unrecognized extension.
An image does not match the format specified in a call to LoadFromClipboardFormat or SaveToClipboardFormat.
An application attempts to set a bitmap's PixelFormat property to an unsupported value.

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

Pa zakomentiraj sve linije poslije LoadFromFile da budeš siguran da je u tome riječ. Inače, najvjerojatnije je riječ o krivoj bmp slici. Jpg treba dodatna zaglavlja za podršku.

Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Visual C++ - kako koristiti MFC kontrole?

znam sto posto da je tu problem, jer sam debuggiro i vidim da tu pukne

probat ću onda nešto iskombinirat

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

skužio sam u čemu je problem. c poprimi vrijednost -1, a evo što piše u dokumentaciji

 

Read Pixels to learn the color on the drawing surface at a specific pixel position within the current clipping region. If the position is outside the clipping rectangle, reading the value of Pixels returns -1.

 

dalje, ClipRect

 

Read-only property that specifies the boundaries of the clipping rectangle.

Use ClipRect to determine where the canvas needs painting. ClipRect limits the drawing region of the canvas so that any drawing that occurs at coordinates outside the ClipRect is clipped and does not appear in the image.

...

Note: ClipRect can be modified using the SelectClipRgn Win32 API.

 

to ide nekako ovako:

 

HRGN MyRgn;
MyRgn = ::CreateRectRgn(100,100,200,200);
::SelectClipRgn(Image1->Canvas->Handle,MyRgn);
Image1->Canvas->Brush->Color = clRed;
Image1->Canvas->FillRect(Image1->Canvas->ClipRect);
Image1->Invalidate();
::SelectClipRgn(Image1->Canvas->Handle,NULL);
::DeleteObject(MyRgn);

 

 

samo što to meni nikako ne uspijeva i c uvijek poprima -1

 

edit: evo riješio sam

 

prvo učitam jpeg, pa onda kreiram novi TBitmap i taj jpeg dodjelim toj bitmapi i dalje ide sve normalno

 

TJPEGImage *jpeg = new TJPEGImage();
jpeg->LoadFromFile(Edit1->Text);
TBitmap *bm = new TBitmap();
bm->Assign(jpeg);
HRGN MyRgn = CreateRectRgn(0,0,200,200);
SelectClipRgn(bm->Canvas->Handle,MyRgn);
TColor c = bm-> Canvas->Pixels[0][0];
int r = GetRValue(c);
int g = GetGValue(c);
int b = GetBValue(c);
ShowMessage("r: " + String(r) + "\ng: " + String(g) + "\nb: " + String(b));
itd...

Atomska bubamara | edomovina.blog.hr
Poruka je uređivana zadnji put ned 5.2.2012 23:26 (jurluk).
 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice