Avatar billede baltazar_ Nybegynder
26. april 2003 - 13:16 Der er 3 kommentarer

problem med rect

Jeg tegner et grid i et billede og vil meget gerne have oprrete et rect for hver firkant i grid.

jeg tegner mit grid på denne måde og ville være glad for lidt hjælp til at oprette disse rects på sammen måde.


void CTestDlg::DrawGrid(CDC *pDC, CRect rect,CPoint point)
{

    CDC* pdc = m_st1.GetWindowDC();

if(pdc==NULL)
{
            AfxMessageBox( "pdc null" );
}

else

m_pt.x = rectStaticClient.left;
    m_pt.y = rectStaticClient.top;

    CtestDlg* pDoc = this;

    // Major unit lines
    CPen penDash;
    penDash.CreatePen(PS_SOLID, 1, m_gridColor);
    CPen* pOldPen = pDC->SelectObject(&penDash);

    for (int x = 0-sourcex; x < rect.right; x += rect.right/10)
    {    
       
   
        if (x != 0)

        { 
            pDC->MoveTo(x, rect.top);
            pDC->LineTo(x, rect.bottom);
           
        }
    }

    for (int y = 0-sourcey; y < rect.bottom; y += rect.bottom/10)
    {
        if (y != 0)
        {
            pDC->MoveTo(rect.left, y);
            pDC->LineTo(rect.right, y);
           
    }


       
    };

    pDC->SelectObject(pOldPen);

}
Avatar billede jpk Nybegynder
28. april 2003 - 17:15 #1
Hvad med:


CRect rects[10][10];

for (int x = 0-sourcex; x < rect.right; x += rect.right/10)
    {   
        for(int i=0; i<10; ++i)
        {
            rects[i][0].left = x;
            rects[i][0].right = x + rect.right/10;
        }
   
        if (x != 0)

        { 
            pDC->MoveTo(x, rect.top);
            pDC->LineTo(x, rect.bottom);
           
        }
    }

    for (int y = 0-sourcey; y < rect.bottom; y += rect.bottom/10)
    {
        for(int i=0; i<10; ++i)
        {
            rects[0][i].top = y;
            rects[0][i].bottom = y + rect.bottom/10;
        }

        if (y != 0)
        {
            pDC->MoveTo(rect.left, y);
            pDC->LineTo(rect.right, y);
           
    }
Avatar billede baltazar_ Nybegynder
28. april 2003 - 21:18 #2
jeg har desværre et lille problem med at få bekræftet om det nu virker som det skal  jeg har prøvet at lave en if(PointInrect)således for at fylde det rect der har fokus med sort for at se om der sker det forventede. Men der sker ikke noget.

gider du løbe denne igennem og se om jeg har overset noget eller gjort noget forkert


min kode ser således ud:

void CScrollBitmapDlg::DrawGrid(CDC *pDC, CRect rect,CPoint point)
{

CDC* pdc = m_st1.GetWindowDC();
CClientDC dc(this);
if(pdc==NULL)
{
            AfxMessageBox( "pdc null" );
}

else

m_pt.x = rectStaticClient.left;
    m_pt.y = rectStaticClient.top;

    CScrollBitmapDlg* pDoc = this;

    // Major unit lines
    CPen penDash;
    penDash.CreatePen(PS_SOLID, 1, m_gridColor);
    CPen* pOldPen = pDC->SelectObject(&penDash);




CRect rectsingrid[10][10];

for (int x = 0-sourcex; x < rect.right; x += rect.right/10)
    {   
        for(int i=0; i<10; ++i)
        {
            rectsingrid[i][0].left = x;
            rectsingrid[i][0].right = x + rect.right/10;
        }
   
        if (x != 0)

        { 
            pDC->MoveTo(x, rect.top);
            pDC->LineTo(x, rect.bottom);
           
        }
    }

    for (int y = 0-sourcey; y < rect.bottom; y += rect.bottom/10)
    {
        for(int i=0; i<10; ++i)
        {
            rectsingrid[0][i].top = y;
            rectsingrid[0][i].bottom = y + rect.bottom/10;
           
           
        }

        if (y != 0)
        {
            pDC->MoveTo(rect.left, y);
            pDC->LineTo(rect.right, y);
           
    }
       
    if(rectsingrid[0][0].PtInRect(point))

    // start point in rect klamme
    {
   
    FillRect(dc,&rectsingrid[0][i],(HBRUSH)GetStockObject(BLACK_BRUSH));
    }
    // slut point in rect rectsingrid
       
    };

    pDC->SelectObject(pOldPen);

}
Avatar billede baltazar_ Nybegynder
28. april 2003 - 21:19 #3
jeg for igen fejl så jeg skulle mene jeg har parset CPoint korrekt til DrawGrid.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester