मैंने CRgn :: CreatePolygonRgn () के साथ एक CRgn बनाया है। अब मुझे इन बिंदुओं को उस क्षेत्र से निकालने की जरूरत है। मैंने पाया कि डेटा को CRgn::GetRegionData() का उपयोग करके निकाला जा सकता है। लेकिन डेटा प्राप्त करने में असमर्थ ..

क्या कोई मुझे उदाहरण के साथ बता सकता है ..

0
Tajuddin Khandaker 15 सितंबर 2019, 13:17

1 उत्तर

सबसे बढ़िया उत्तर

ऑनपेंट ईवेंट के साथ मान्य डेटा पुनर्प्राप्त करने में सक्षम।

CPaintDC dc(this); // device context for painting       

CRgn   rgnA;

CPoint ptVertex[5];

ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;

VERIFY(rgnA.CreatePolygonRgn(ptVertex, 5, ALTERNATE));

CRect rectRgnBox;
int nRgnBoxResult = rgnA.GetRgnBox(&rectRgnBox);
ASSERT(nRgnBoxResult != ERROR && nRgnBoxResult != NULLREGION);

CBrush brA;
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0)));  // rgnA Red
VERIFY(dc.FrameRgn(&rgnA, &brA, 2, 2));
rectRgnBox.InflateRect(3, 3);

int size = GetRegionData(rgnA, 0, NULL);
int rectcount = 0;

if (size)
{
    RGNDATA * pRegion = (RGNDATA *) new char[size];
    GetRegionData(rgnA, size, pRegion);

    RECT * pRect = (RECT *)& pRegion->Buffer;

    int rectcount = pRegion->rdh.nCount;

    if (pRegion)
    {
        int f;
        for (unsigned i = 0; i < pRegion->rdh.nCount; i++)
        {
            f = pRect[i].left;
            f = pRect[i].top;
            f = pRect[i].right;
            f = pRect[i].bottom;
        }                   
    }

    delete[](char *) pRegion;

}

कोड संदर्भ CRgn::CreatePolygonRgn

संपादित करें

अद्वितीय रंग वाला प्रत्येक आयत यह विचार देगा कि आयत किस प्रकार क्षेत्र को भर रहे हैं

enter image description here

3
Santosh Dhanawade 17 सितंबर 2019, 08:02