C#如何绘制跟随鼠标的十字线而不影响背景?

背景图片:Graphicsg=Graphics.FromImage(image);1、十字线中间留一个透明的点2、显示小标签tips显示坐标信息请帮忙给些实现思路或相关参... 背景图片:Graphics g = Graphics.FromImage(image);
1、十字线中间留一个透明的点
2、显示小标签tips显示坐标信息
请帮忙给些实现思路或相关参考,谢谢!
展开
 我来答
百度网友6e0c619
2011-09-01 · TA获得超过503个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:382万
展开全部
第一步:
定义变量:
//画十字的点,因为中间有空白,所以用8个点
Point[] ps = new Point[] { new Point(2, 0), new Point(2, 1), new Point(0, 2), new Point(1, 2), new Point(3, 2), new Point(4, 2), new Point(2, 3), new Point(2, 4) };
//十字大小
int sizeP = 1;
//十字的位置
Point pos = new Point(0, 0);

第二步:
在你要的控件上携拦划出你要的十字
我测试用的是form1,记得在事件Paint里面,其携隐隐他地方容易丢失
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;

g.DrawLine(new Pen(Color.Red), ps[0].X + pos.X, ps[0].Y + pos.Y, ps[1].X + pos.X, ps[1].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[2].X + pos.X, ps[2].Y + pos.Y, ps[3].X + pos.X, ps[3].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[4].X + pos.X, ps[4].Y + pos.Y, ps[5].X + pos.X, ps[5].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[6].X + pos.X, ps[6].Y + pos.Y, ps[7].X + pos.X, ps[7].Y + pos.Y);
}

第三步:
改辩厅变大小,在你想改变大小的时候调用下 我测试是再
form_load里面设置为5
private void SetSize(int sizep)
{
sizeP = sizep;
for (int i = 0; i < 8; ++i)
{
ps[i].X *= sizeP;
ps[i].Y *= sizeP;
}
}
第四部:
改变位置
private void SetPos(int x, int y)
{
pos.X = x - sizeP * 2;
pos.Y = y - sizeP * 2;
}
我吧他放在MouseMove事件里面 记得要调用Refresh来重绘啊
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
SetPos(e.X, e.Y);
this.Refresh();
}

就写这么多 不懂再问我
追问
波形图片,十字坐标可以即时读出幅度。
窗体下方放置按钮,加载波形图片直接在窗体上绘制,双击鼠标变成带十字线。
十字线中心是透明,利用背景颜色来确认鼠标位置是否确实在波形曲线上。
鼠标右下角显示Tips小标签。
问:十字线是否利用双窗体来实现,或是有其他简单的方式。
追答
按照你现在的需求,确实可以用双窗体来实现,不过,窗体的透明有点复杂,
利用背景颜色来确认鼠标位置是否确实在波形曲线上。
这个不好,不是不能实现,是不准确
可以通过鼠标坐标(x,y)来算,将x带入波形函数,然后算值,y 和算出的结果误差不大于多少时候就是
若不是y函数 就把Y带入,算出一个x,x误差不超过就是在曲线上

最后给你的建议有个非常好的
就是找一个gif图片做十字架,用image控件来显示图片,它支持透明层。然后tooltips就用image的tooltips就好了:)
保证可以实现你要的:)
十字架图片可以自己ps
记得要有透明层哦
百度网友10835a8
2011-09-03 · TA获得超过103个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:70.9万
展开全部
可以考备虚谈虑把这个十字线弄成一个图片誉消,而这个图片是放在仿碰一个控件上的,你移动只是移动控件,这样就会很流畅。
追问
移动picturebox,为何form的背景图片backgroundimage也会跟着晃动起来,怎么解决这个问题?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我们木爱青
2011-09-03
知道答主
回答量:45
采纳率:0%
帮助的人:15万
展开全部
g.DrawLine(new Pen(Color.Red), ps[0].X + pos.X, ps[0].Y + pos.Y, ps[1].X + pos.X, ps[1].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[2].X + pos.X, ps[2].Y + pos.Y, ps[3].X + pos.X, ps[3].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[4].X + pos.X, ps[4].Y + pos.Y, ps[5].X + pos.X, ps[5].Y + pos.Y);
g.DrawLine(new Pen(Color.Red), ps[6].X + pos.X, ps[6].Y + pos.Y, ps[7].X + pos.X, ps[7].Y + pos.Y);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式