26. marts 2003 - 20:35Der er
8 kommentarer og 1 løsning
CreateRectRgn ?
Er der nogle der ligger inde med et eksempel på et Rect der er delt op i x*x antal regioner. Jeg kan simpelthen ikke finde ud af hvordan man skal skrive variablerne for at region1 ligger ved siden af region2 osv. evt. et link til et sted hvor det vuisuelt er forklaret hvorledes man opdeler sådan et rect i felter.
det er ligepræcis det jeg leder efter, men kunne jeg lokke dig til at kigge på hvorledes jeg kan lave så hver enkelt område bliver farvet henholdsvis sort og hvid så det kommer til at ligne et skakbrædt, jeg bruger dette til at fylde med FillRect(dc,&rect,(HBRUSH)GetStockObject(BLACK_BRUSH)); FillRect(dc,&rect,(HBRUSH)GetStockObject(WHITE_BRUSH));
Jeg brugte kun CRgn fordi du referede til metoden CreateRectRgn og du "plejer" at bruge MFC så vidt jeg husker... Det kan jo let ændres til rects, således
const int nRects = 5; // gives 5 * 5 = 25 rects CRect rects[nRects][nRects]; // 2D array int nWidth = 100; // Width to be divided amongst rects int nHeight = 80; // Height to be divided amongst rects for(int y=0; y<nRects; ++y) { for(int x=0; x<nRects; ++x) { rects[x][y].SetRect(x*(nWidth/nRects)+1, y*(nHeight/nRects)+1, (x+1)*(nWidth/nRects), (y+1)*(nHeight/nRects)); } }
hvorledes kunne jeg bruge det sammen med et statisk felt i dialogen, jeg opretter et rect således i et bestemt område
CRect rectlayer; m_st1.GetWindowRect(&rectlayer); // <----- dette skal deles op i felter ScreenToClient(rectlayer);
jeg kan ikke rigtig hitte ud af hvorledes jeg for placeret felterne andre steder end i øverste venstre hjørne ( i hele dialogen )og jeg ville meget gerne have udført dette på det jeg kalder CRect rectlayer som er et bestemt statisk vindue ( kaldet variablen "m_st1" ) i min dialog.
CRect rectlayer; m_st1.GetWindowRect(&rectlayer); ScreenToClient(rectlayer); const int nRects = 5; // gives 5 * 5 = 25 rects CRect rects[nRects][nRects]; // 2D array int nWidth = rectlayer.Width(); // Width to be divided amongst rects int nHeight = rectlayer.Height(); // Height to be divided amongst rects for(int y=0; y<nRects; ++y) { for(int x=0; x<nRects; ++x) { rects[x][y].SetRect(x*(nWidth/nRects)+rectlayer.left, y*(nHeight/nRects)+rectlayer.top, (x+1)*(nWidth/nRects)+rectlayer.left-1, (y+1)*(nHeight/nRects)+rectlayer.top-1); } }
Du skal dog være opmærksom på, at her regnes med heltal og der derfor kommer nogle afrundinger... Det gør at alle felter bliver lige store, men at felterne ikke nødvendigvis fylder hele dit rectlayer.
Det med afrundinger var ikke nødvendigvis ment som et problem. Som det er nu, vil et rect på fx 11x11 pixels give 4 felter med størrelsen 5x5 pixels og en rest-kant på 1 pixel i bredden Hvis du hellere vil have rects på fx 5x5, 6x5, 5x6 og 6x6, kan du bruge float (eller double) til udregningen!
Et CRect objekt er jo egentlig bare 4 integers (left, top, right og bottom), så der er ikke noget der forhindrer dig at lave et rect 1x1 pixel. Du kan endda også lade left være STØRRE end right...
Synes godt om
Ny brugerNybegynder
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.