|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
功能:
用鼠标单击一个区域N次。( N >3 )
按下G键。 ( G是自己定义的, 无特殊含义 )
实现画多边形的功能。
很简单吧?
画多边形的API函数是 Polyline
- BOOL Polyline(
- HDC hdc, // handle to device context
- CONST POINT *lppt, // array of endpoints
- int cPoints // number of points in array
- );
复制代码 我的做法是将鼠标点击时的,HIWORD(lParam)和LOWORD(lParam)逐个传入POINT结构体数组。
然后在响应G键的函数上,调用Polyline就可以了。
从而实现,点几下,就闪出几边形。
但使用Polyline前必须得先定义POINT pt [N];
N显然每次不是一个固定的常量。
这个问题如何解决呢?
如果懒得看这么长的描述,简单的说,在C语言中,用什么方法补充数组的这种局限性。
好像有些说法是链表指针之类的,那在这个案例中具体如何实现。
我的回调函数中代码如下,缺陷是只能画固定边数的多边形,求完善
- //将数组定义为静态变量
- static POINT poly[6] = {0};
- HDC hdc;
- int i;
- switch(uMsg)
- {
- case WM_LBUTTONDOWN:
- //定义为五边形,只对前4点赋值,第5点和第1点重合
- for(i = 0; i<5; i++)
- {
- if(!poly[i].x && !poly[i].y)
- {
- poly[i].y = HIWORD(lParam);
- poly[i].x = LOWORD(lParam);
- break;
- }
- }
- break;
- case WM_CHAR:
- {
- switch(wParam)
- {
- case 'G':
- case 'g':
- if(!poly[4].x && !poly[4].y)
- {
- MessageBox(NULL, TEXT("请用鼠标选出五个点"), "Warning", 0);
- break;
- }
- poly[5] = poly[0];
- hdc = GetDC(hWnd);
- Polyline(hdc, poly, 6);
- ReleaseDC(hWnd, hdc);
- //清空数组,等待下一次赋值
- for(i=0; i<6; i++)
- {
- poly[i].x = 0;
- poly[i].y = 0;
- }
- break;
- }
- }
- break;
复制代码
|
|