MFC - prosím o pár rad – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

MFC - prosím o pár rad – C / C++ – Fórum – Programujte.comMFC - prosím o pár rad – C / C++ – Fórum – Programujte.com

 

klinki0
Návštěvník
12. 5. 2009   #1
-
0
-

Zdravím, tak jsem začal plně pracovat na aplikaci na návrh el. obvodů. Jelikož pracuju v MFC uplně poprvé a nemám s ním vůbec žádné zkušenosti tak bych prosil pár rad. (postupně budu přidávat další dotazy)

Zatím je tu první várka :)


- budu potřebovat označit součástku, kterou jsem si přidal do dokumentu a nějak dál s ní pracovat. Zatím mě napadlo řešit to pomocí Rectangle - udělal bych rectangle kolem součástky a pak bych testoval při kliknutí zda je kurzur uvnitř toho rectanglu (myslim že třída Rectangle na to má dokonce i nějakou metodu).
Tak tady je to jasné, udělám to s tím rectanglem

Ovšem zdá se mi, že toto řešení má nějaké nevýhody např.:
- kvůli jedné součástce budu muset kontrolovat celé pole součástek, abych zjistil na kterou součástku jsem klikl, takže by bylo asi výhodnější rozdělit si obrazovku do několika sektorů, kde by každý sektor měl své pole.. Což by asi nebyl takový problém - měl bych třeba 4 velké rectangly a 4 odlišná pole.
Tady asi použiju řešení R-Tree, které se mi na to docela líbí

Napadlo mě - když už bych to takhle rozděloval na 4 rectangly nešlo by to tak udělat i s překreslováním okna? Takhle když přidám součástku, tak dojde k překreslení celého okna znovu
(Zatím to mám řešené tak, že dojde k přidání součástky do bitmapy která je v paměti a tou potom přepíšu celý dokument. Dřív sem ještě používal řešení že sem měl paměť na jednotlivé čáry apod. a překresloval sem celou paměť, teď už by to mělo být o něco leší)

A pak sem se ještě chtěl zeptat zda je lepší řešit součástky pomocí bitmapy v resources pro každou součástku, nebo jí "ručně" vykreslit pomocí GDI funkcí (tak to mám řešené teď) - např. odpor mám vykreslený pomocí 2 LINE a 1 Rectanglu. Cívka jsou 3 Arcs a 2 Line jako ostatně všude - zatím dělám základní součástky R, L, C + zdroje a tam se obejdu se 2 vývody...



A ještě další dotaz :) V eaglu se mi líbí, že když si vyberu součástku, tak se mi přilepí na kurzor a sleduje ho (tak že kurzor je ve středu součástky) chtěl bych to do svého programu taky implementovat, ale jak to udělat bez neustálého překreslování? Lze to vůbec?
(tady je příklad toho jak to myslím, bohužel s překreslováním :( ale alespoň z toho lépe pochopíte o co jde)
http://www.edisk.cz/stahni/45171/Animation.rar_1.21MB.html

(Všiml jsem si, že v eaglu vůbec nedochází k problikávání ani když přidávám moooc součástek hodně rychle, u mého programu stačí přidat trochu rychleji za sebou více součástek a už bliká jak stroboskop.. Natožpak tam ještě cpát to s tim sledováním kurzoru)


Všem děkuji za trpělivost při čtení tohoto celkem dlouhého příspěvku a za případné rady.

P.S: Zítra sem asi hodím zdroják pro lepší představu

Edit: přidal jsem odkaz na ukázku "sledování kurzoru"

Nahlásit jako SPAM
IP: 85.13.98.–
dannyk0
Věrný člen
13. 5. 2009   #2
-
0
-

1, S tim rectanglem bych to resil asi stejne.

2, S tim rozdeleni na boxiky to by slo taky,ale podle me je to zbytecne (zalezi, jak moc velke to ma byt). Pochybuju, ze budes mit schema o 100 000 soucastkach a pokud ano, tak ti ani tohle rozdeleni moc nepomuze.Spise bych to resil asi nejakym stromem nebo podobnou strukturou, ktera by mela uchovane pozice x a y a podle nich bych vyhledaval.

3, To s tema bitmapa, to zalezi spis asi na nejakych potrebach, ale spis bych pouzil bitmapu.Teoreticky bys s tema bitmapa mel i jednodussi praci pro vyhledavani tech komponent apod.

4, Samozrejme, ze to prilepeni lze udelat.Akorat si budes muset propocitavat stred rectanglu a podle toho nastavit pozici te bitmapy nebo toho, co presunujes.

5, To s tim blikanim by mel vyresit double buffering, ale s GDI sem zatim moc nepracoval, tak nemuzu poradit presneji (mozna nekdo jiny bude vedet).

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Honza077
~ Anonymní uživatel
1 příspěvek
13. 5. 2009   #3
-
0
-

Koukni se na knihovny pro r-stromy (r-tree). To jsou datové struktury pro uchování souřadnic a obdélníků apod. a rychlé dotazování. Založeny jsou právě na principu dělení na boxy, ale rekurzivně. Tedy ty boxíky jsou rozděleny opět na menší, pokud obsahují více součástek apod.

Nahlásit jako SPAM
IP: 85.207.157.–
klinki0
Návštěvník
13. 5. 2009   #4
-
0
-

Nooo ty R-tree jsou docela zajímavé :) asi to použiju.. díky

Nahlásit jako SPAM
IP: 193.179.248.–
klinki0
Návštěvník
18. 5. 2009   #5
-
0
-
Nahlásit jako SPAM
IP: 85.13.98.–
Jura
~ Anonymní uživatel
637 příspěvků
24. 5. 2009   #6
-
0
-

Zdravím,

neuvedl jsi zdrojáky, takže lze jen odhadovat. Pokud používáš double buffering, tak se ujisti, že v handleru zprávy WM_ERASEBKGND vracíš FALSE, čímž říkáš systému, aby nepřekřesloval pozadní View. Co se týká toho sledování kurzoru, tak předpokladám, že ten rezistor má nějaké své souřadnice levého horního vrcholu, takže pak:



// ten kod si jen vysmyslim, netusim jak to mas napsano
CElectricalElement * pSelected = getSelectedElement();
if( NULL != pSelected )
{
CPoint ptCurr = pSelected->getTopLeft(); // getTopLeft vraci horni bod vybrane soucastky
ptCurr = ptCursor - ptCurr; // ptCursor je souradnice mysi
pSelected->setTopLeft(ptCurr); // a nove nastaveni
}

No, snad to jde pochopit.

Nahlásit jako SPAM
IP: 85.207.192.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 60 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý