发新话题
打印

请教,弱弱的问,多谢!!!

请教,弱弱的问,多谢!!!

BOOL CDraw:ointRgn(float x, float y, int Numble, PointStruct *PointList, float blc)
{
        CRgn m_rgn;                        //定义一个CRgn类的对象rgn
        int x1,y1,i;
        BOOL pb;

        POINT *bbcc;               //定义一个点结构指针
        if(Numble<3)
                return FALSE;
        bbcc=new POINT[Numble];     //给结构指针分配Numble个顶点
        //将按中点的坐标转变成象素坐标
        x1=(int)(x/blc);
        y1=(int)(y/blc);
        //将封闭区域各点的坐标转换成象素坐标
        for(i=0;i<Numble;i++)
        {
                bbcc.x=(int)(PointList.x/blc);
                bbcc.y=(int)(PointList.y/blc);
        }
        m_rgn.CreatePolygonRgn(bbcc,Numble,0); //初始化一个多边形区域

        pb=m_rgn.PtInRegion(x1,y1);         
        if(pb)
                return TRUE;
        else
                return FALSE;         
    m_rgn.DeleteObject();                //删除定义的rgn对象。       
}
我在编译时没错误,可是运行时出错。调试时发现停止在pb=m_rgn.PtInRegion(x1,y1);这一行。我怀疑是这一行m_rgn.CreatePolygonRgn(bbcc,Numble,0); //初始化一个多边形区域 不成功,但有看不出哪错了,诸位帅哥,帮忙看下,非常感激

TOP

CreatePolygonRgn确实有错,应当使用CreatePolyPolygonRgn,后面的函数才支持数组。
换个头像,看见广告就眼红,直接封ID。

TOP

//PointRgn的作用:判断一个点是否在任意多边形区域内
参数:Numble——边界点数,x,y,是点的坐标,多边形顶点的坐标在结构数组PointList中
返回:True——点在多边形区域,False——不在区域内
我只是初始化一个多边形区域,而CreatePolyPolygonRgn函数是初始化一系列多边形区域。我这有本书说CreatePolygonRgn的完整定义是:
BOOL CreatePolygonRgn(LPPOINT lpPoints,int nCount,int nMode);
lop

TOP

lpPoints指向一个POINT结构或CPoint数组,Count是顶点的数目,即表示多边形有多少个顶点,nMode是填充模式,可为ALTERNATE或WINDING.
按照这样说法应该没错呀。可是我也不知怎么改。
_AFXWIN_INLINE BOOL CRgn::CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode)
{ return Attach(::CreatePolygonRgn(lpPoints, nCount, nMode)); }
程序执行到这一步时,应该都还正确,lpPoints的值为0x00443b80
BOOL CGdiObject::Attach(HGDIOBJ hObject)
{
ASSERT(m_hObject == NULL);  // only attach once, detach on destroy
if (hObject == NULL)
     return FALSE;
CHandleMap* pMap = afxMapHGDIOBJ(TRUE); //create map if not exist
        ASSERT(pMap != NULL);
        pMap->SetPermanent(m_hObject = hObject, this);
        return TRUE;
}
到了ASSERT(m_hObject == NULL); 这一步时m_hObject的值为0x00000000
,应该也对。到下一步if (hObject == NULL)
return FALSE; 执行到这一句时,        hObject的值为0x00000000,所以多边形就没有创建函数就返回了。我想问题就出在这里,也不知道是什么原因?

Nothing大哥是怎么认为呢?请多指教,小弟先谢过了。

TOP

????

TOP

发新话题