怎样捕捉图形中的多边形区域???急!!请高手指教!

sandrafei 2005-06-16 07:54:50
客户想要实现的是这样一种效果:
在窗口上显示一个中国地图(光栅图),假设当鼠标悬停在湖南省境内,鼠标旁边出现一个悬浮窗口,单击后弹出新窗口,新窗口上显示湖南省的详细地图。关键是我不知道在中国地图上怎样判断在湖南省境内。请高手们帮帮忙!谢谢!!!!!
...全文
147 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼上的,这么做的话地图就不能缩放了。
而且对于位图地图来说,还不如使用Mask实现。
leonatcs 2005-06-20
  • 打赏
  • 举报
回复
最直接的办法,当然也是个笨办法,
做一个表,把地图上每个象素点坐标和其所在的省份都对应起来,
以后只要知道这个点的坐标,就去查表,就知道在哪里了!
假设一个1024*768的地图,每个点用4bit,最小在400kB以内可以搞定。
其实这个和constantine的颜色法是一样的。
zywx 2005-06-19
  • 打赏
  • 举报
回复
hrgn是一个多边形对象,用CreatePolygonRgn创建,参数是多边形定点的坐标数组和边数,也就是说,要使用PtInRegion,必须有多边形对象,如果用于已经存在的地图,你必须按照地图的边界绘制多变形,然后才能使用PtInRegion阿
sandrafei 2005-06-19
  • 打赏
  • 举报
回复
谢谢楼上的朋友,我试试!
ictor 2005-06-19
  • 打赏
  • 举报
回复
HRGN hrgnA=CreatePolygonRgn(v,4,NULL);
最后一个参数不可以为NULL的,(ALTERNATE ,WINDING)中任选一个就可了
sandrafei 2005-06-19
  • 打赏
  • 举报
回复
我试过了:
POINT v[4];

v[0].x=100;
v[0].y=150;
v[1].x=200;
v[1].y=150;
v[2].x=200;
v[2].y=300;
v[3].x=100;
v[3].y=300;

HRGN hrgnA=CreatePolygonRgn(v,4,NULL);
运行没什么错误,但hrgnA结果是null,怎么回事?
sandrafei 2005-06-18
  • 打赏
  • 举报
回复
高手们帮帮忙啊
sandrafei 2005-06-17
  • 打赏
  • 举报
回复
我试了一下:
POINT v[4];

v[0].x=100;
v[0].y=150;
v[1].x=200;
v[1].y=150;
v[2].x=200;
v[2].y=300;
v[3].x=100;
v[3].y=300;

HRGN hrgnA=CreatePolygonRgn(v,4,NULL);
运行没什么错误,但hrgnA结果是null,怎么回事?
constantine 2005-06-17
  • 打赏
  • 举报
回复
以前有人做过,用颜色判断,也就是说,不同省份用不同颜色,判断鼠标所在的颜色就ok了
ArWen 2005-06-17
  • 打赏
  • 举报
回复
楼上说的原理是对的.
用完了,别忘了DeleteObject
sandrafei 2005-06-17
  • 打赏
  • 举报
回复
谢谢楼上的朋友:
但我想了一下,用颜色好像不是太好,因为地图上还有河流、湖泊等一些分布在各处的颜色。
所以我还是想请教BOOL PtInRegion(HRGN hrgn,int X,int Y)这个函数的用法,也即是hrgn怎样获取
zywx 2005-06-17
  • 打赏
  • 举报
回复
用GetDC先得到窗口dc

COLORREF GetPixel(

HDC hdc, // handle of device context
int XPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);

sandrafei 2005-06-17
  • 打赏
  • 举报
回复
请问判断鼠标所在的颜色怎样获取?
F117p 2005-06-16
  • 打赏
  • 举报
回复
不好意思,写错了:
POINT v[31]

...

BeginPaint...
...
EndPaint..
F117p 2005-06-16
  • 打赏
  • 举报
回复
先创建区域:
POINT v[20];

v[0].x=10;
v[0].y=100;
...
v[30].x=22;
v[30].y=33;

//这个数组可能就是你地图地形的数据。
HRGN hrgnA=CreatePolygonRgn(v,30,NULL);
sandrafei 2005-06-16
  • 打赏
  • 举报
回复
谢谢楼上的朋友:
我查了一下这个函数的帮助:
BOOL PtInRegion(

HRGN hrgn, // handle of region
int X, // x-coordinate of point
int Y // y-coordinate of point
);
Parameters
hrgn
Identifies the region to be examined.
X
Specifies the x-coordinate of the point.
Y
Specifies the y-coordinate of the point.
Return Values
If the specified point is in the region, the return value is nonzero.
If the specified point is not in the region, the return value is zero.
这个帮助写的太简单了,我不知道这个hrgn该怎么定义?能帮帮我吗?非常感谢
F117p 2005-06-16
  • 打赏
  • 举报
回复
可以用PtInRegion();//判断某点是否在某个区域里
原形如下:
BOOL PtInRegion(HRGN hrgn,int X,int Y);
hrgn,区域的句并,由你自己来定义,此函数要包含头文件:windows.h

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧