/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Problem med eksempel fra C++ bog
Fra : Jacob Jensen


Dato : 21-01-05 19:27

For dem der ikke har fulgt med i tråden "Windowsprogrammering" kan jeg lige
opsummere.

Jeg sidder med bogen "Beginning visual C++ 6" og er noget ind i kapitel 16
hvor man lave et lille tegneprogram med hjælp fra MFC. På side 671 (hvis i
er SÅ nysgerrige) skulle man gerne kunne tegne figuren "curve"
(frihåndstegning) også. I klassen SketcherDoc (dokumentet) er der blevet
erklæret en liste:

CTypedPtrList<CObList, CElement*> m_ElementList;

....hvori alle figurer man tegner skulle blive placeret når man slipper
museknappen:

void CSketcherView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(this == GetCapture())
ReleaseCapture();

//Var jeg ved at tegne noget?
if(m_pTempElement)
{
//Tilføj figuren til dokumentet så den ikke glemmes
GetDocument()->AddElement(m_pTempElement);
InvalidateRect(0);
m_pTempElement = 0;
}
}

Programmet går ned når jeg slipper museknappen efter at have tegne noget.
Selv hvis det bare er en "line" jeg har tegnet. Line har hele tiden virket
inden jeg brugte den liste til at gemme objekterne i. Noget siger mig det
går galt når windows sender en repaint for hvis jeg fjerner linjen
"InvalidateRect(0)" kan jeg tegne mange figurer og programmet går først ned
når der kommer en repaint. Derfor får i også lige:

void CSketcherView::OnDraw(CDC* pDC)
{
CSketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

//Dette returnerer første element i listen af elementer som jeg viste
ovenfor
POSITION aPos = pDoc->GetListHeadPosition();

CElement* pElement = 0;

while(aPos)
{
pElement = pDoc->GetNext(aPos);
if(pDC->RectVisible(pElement->GetBoundRect()))
pElement->Draw(pDC);
pDoc->GetNext(aPos)->Draw(pDC);
}
}

Puha. Det bliver da en del kode det her. Hvis i vil se mere (eksempelvis
GetListHeadPosition eller figurenes Draw-funktioner) kan i bare bede om det.

Jacob



 
 
Jacob Jensen (21-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 21-01-05 19:43

> Programmet går ned når jeg slipper museknappen efter at have tegne noget.
> Selv hvis det bare er en "line" jeg har tegnet. Line har hele tiden virket
> inden jeg brugte den liste til at gemme objekterne i. Noget siger mig det
> går galt når windows sender en repaint for hvis jeg fjerner linjen
> "InvalidateRect(0)" kan jeg tegne mange figurer og programmet går først
> ned når der kommer en repaint. Derfor får i også lige:

På den anden side, hvorfor skulle windows sende en repaint efter jeg har
sluppet museknappen? Måske er det slet ikke der problemet ligger. hmmm

Jacob



Jacob Jensen (21-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 21-01-05 20:00

> while(aPos)
> {
> pElement = pDoc->GetNext(aPos);
> if(pDC->RectVisible(pElement->GetBoundRect()))
> pElement->Draw(pDC);
> pDoc->GetNext(aPos)->Draw(pDC);
> }
> }

Den sidste linje dér skal naturligvis ikke være der :) Jeg har compilet uden
linjen "pDoc->GetNext(aPos)->Draw(pDC);" men det hjalp ikke.

Jacob



Jacob Jensen (21-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 21-01-05 20:12

Der er kommet lidt nyt i sagen. Først har jeg lige lagt et screenshot af
programmet på min hjemmeside:

http://home20.inet.tele.dk/omo/sketcher.jpg

Som jeg skrev kan jeg fjerne "InvalidateRect(0)" fra OnLButtonUp-funktionen
og så går programmet ikke længere ned så snart jeg slipper museknappen. Det
har jeg prøvet og så har jeg tegnet en streg (line). På billedet har jeg
lige netop tegnet stregen og programmet er ikke gået ned endnu. Nu kan jeg
frik trække i selve programvinduet så længe jeg gør det mindre (også ind
over stregen). Så snart jeg trækker det større går programmet ned.
Programmet går ned så snart jeg trækker i det lille vindue med stregen i
(også hvis jeg kun gør det mindre).

Jacob



Bertel Brander (21-01-2005)
Kommentar
Fra : Bertel Brander


Dato : 21-01-05 23:45

Jacob Jensen wrote:
> Der er kommet lidt nyt i sagen. Først har jeg lige lagt et screenshot af
> programmet på min hjemmeside:
>
> http://home20.inet.tele.dk/omo/sketcher.jpg
>
> Som jeg skrev kan jeg fjerne "InvalidateRect(0)" fra OnLButtonUp-funktionen
> og så går programmet ikke længere ned så snart jeg slipper museknappen. Det
> har jeg prøvet og så har jeg tegnet en streg (line). På billedet har jeg
> lige netop tegnet stregen og programmet er ikke gået ned endnu. Nu kan jeg
> frik trække i selve programvinduet så længe jeg gør det mindre (også ind
> over stregen). Så snart jeg trækker det større går programmet ned.
> Programmet går ned så snart jeg trækker i det lille vindue med stregen i
> (også hvis jeg kun gør det mindre).
>

Hvis du vil have mig til at kikke på det, så send hele sourcen, og
projekt filerne. Min email addresse er valid.

/b

--
"We learned more from a three minute record, baby
than we ever learned in school"
- Bruce Springsteen

Jacob Jensen (22-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 22-01-05 01:27

Tusind tak til Bertel. Problemet er løst.

acob



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste