Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Skrolovanje teksta na CDC-u

[es] :: C/C++ programiranje :: Skrolovanje teksta na CDC-u

[ Pregleda: 2333 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rapidlord
Vladan Markovic
dev
KG

Član broj: 10145
Poruke: 428
*.vdial.verat.net



+1 Profil

icon Skrolovanje teksta na CDC-u24.06.2004. u 11:12 - pre 218 meseci
Potreban mi je algoritam, ako postoji a verujem da postoji za sledeci problem:

platforma: MFC.

Imam veliku velicinu kompresovanog teksta oko 2 Mb koji se endzinom koji nemogu da menjam izvlaci po pasusima (ceo pasus odjednom u char*), tekst se prikazuje preko CDC objekta, funkcijom CDC::TextOut.

Koji je najbolji algoritam za skrolovanje teksta misem (pritisnes dugme i vuces gore dole).
Iscitavanje teksta ii provera dali se nalazi na ekranu za svaki pomeraj misa, pa ako se nalazi iscrtaj je suvise sporo.

Imam par ideja tipa: napravim vise pomocnih CDC po jedan za svaki pasus koje posle skrolujem po glavnom CDC u krug, dok iscitavam samo pasus koji tek treba da udje u ekran itd.

Ali nebih da izmisljam toplu vodu, dobro bi mi dosao savet iskusnog programera.

Hvala.

Vladan Markovic
 
Odgovor na temu

ned
Australia

Član broj: 1263
Poruke: 23
*.lowrp1.vic.optusnet.com.au



Profil

icon Re: Skrolovanje teksta na CDC-u24.06.2004. u 12:24 - pre 218 meseci
Najlakse resenje je da se upotrebi "multi-line edit control" - CEdit
Ta jedna naizgled jednostavna stvar ce ti dati sve sto treba. Dali je
porebno prvo sagraditi 'parent window' nisam siguran ali mislim
da nije potrebno posto CEdit je derivacija od CWnd.

Ako zelis mnogo vise posla onda moras direktno stvoriti app window
baziran na CWnd().

----------------------------------------
 
Odgovor na temu

rapidlord
Vladan Markovic
dev
KG

Član broj: 10145
Poruke: 428
*.vdial.verat.net



+1 Profil

icon Re: Skrolovanje teksta na CDC-u24.06.2004. u 12:54 - pre 218 meseci
CEdit ne moze da se koristi jer tekst koji treba da se prikaze treba da se formatira na vise razlicitih nacina, dok CEdit podrzava samo singe-format font, na celu kontrolu se primenjuje samo jedna vrsta fonta. RichEdit kontrola ne moze iz razloga jer je operativni sistem Windows CE koji jednostavno nema CRichEdit klasu niti nesto slicno. Osim ispisivanja direkto na CDC mozda moze da se uradi i sabklasing neke kontrole , mada ja nista nisam nasao , ako neko zna kako naka kaze??

Ja trenutno vidim resenje samo u direktnom pisanju po CDC-u;
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.3.133.130.ptr.us.xo.net



+1000 Profil

icon Re: Skrolovanje teksta na CDC-u25.06.2004. u 02:03 - pre 218 meseci
Direktno pisanje po CDC-u je u sustini pravo resenje.

Ako se vec u WinCE ne moze zajahati CRichEdit kontrola, ne preostaje mnogo izbora.

Direktno pisanje sa CDC-om (ili malo indirektnije - u memorijsku instancu CDC-a
pa odatle na aktivni CDC) se ne moze izbeci, i u sustini je legitimno resenje za tu
svrhu koju opisujes.

Pitanje je samo - treba li funkcionalnost koju to zezanje sa CDC ima za cilj uobliciti
u neki portabilan modul (klasa ? DLL ? ActiveX kontrola ? ...).

Ako bi to uradio subklasujuci CEdit, odmah bi dobio lepo usadjen (embedded) scrollbar,
uz vrlo lako interno kontrolisanje parametera scroll-a. Problem je sto bi u cilju
dobijanja kompletne kontrole fonta (stil, visina, atributi) kao i boje background-a i
teksta morao da override-ujes na pravi nacin nekoliko message handler-a. CEdit je
malo jogunast sto se tice flicker-a, ali ima par trikova kako se moze to lepo uraditi.

Pogledaj CodeProject.com - verovatno imaju nesto u tom smislu.
 
Odgovor na temu

ned
Australia

Član broj: 1263
Poruke: 23
*.lowrp1.vic.optusnet.com.au



Profil

icon Re: Skrolovanje teksta na CDC-u25.06.2004. u 10:26 - pre 218 meseci
Potreba da se tekst formatira na razne nacine uveliko otezava ovaj projekat. Ja ne vidim mnogo sanse uspeha u vidu stim sto vi verovatno nemate mnogo iskustva sa ovakvom vrstom problema. U sustini, vasa 2MB teksta se mora da pretvori u neku vrstu datoteke koja je dovoljno fleksibilna da dozvoli razne atribute da se asociraju sa bilo kojim slovom u ta dva MB teksta.

Kad se dodje do 'slikanja' odedjenog dela teksta na oknu tu je potreban
samo jedan 'device context', posto samo jedan i postoji ( sto se tice okna). Ta operacija se radi tako sto se preuzme kontrola nad funkcijom OnPaint(), ako subklasiras CWnd, ili OnDraw() ako subklasiras CView(). OnDraw() ima CDC* kao argument.

Upotreba kompatibilnog DC u memoriji je komplikacija koja se moze ostaviti za kasnije.

----------------------------------------
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.3.133.130.ptr.us.xo.net



+1000 Profil

icon Re: Skrolovanje teksta na CDC-u28.06.2004. u 18:04 - pre 217 meseci
Ako se pise ActiveX kontrola, onda i OnDraw( ) i OnPaint( ) mogu da koegzistiraju u
samom kodu. OnDraw( ) se zove dok je kontrola u resource editoru VisualStudio-a, tj.
dok jos nije instancionirana, dok se OnPaint( ) zove od momenta od kada instancionirana
kontrola postane prozor (tj. posle izvrsenja WM_CREATE handler-a).

Istini za volju, OnDraw( ) u ActiveX kontrolama moze da bude sasvim dovoljan handler
za sve farbarsko-lakirerske poslove - ako se ne overriduje OnPaint( ), prefarbavanje ce
automatski biti prosledjivano OnDraw( ) - u. Ipak, u nekim flavor-ima kontrole OnPaint( ) je ipak neophodan.

Sto se tice crtanja u memorijskom DC-ju, posle CMemDC klase (by Keith Rule - www.codeproject.com) napor implementiranja je vrlo zanemarljiv - sve sto treba je
jedan #include statement i jedna deklaracija varijable.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Skrolovanje teksta na CDC-u

[ Pregleda: 2333 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.