如何实现可拖动的矩形和直线,急,帮忙啊。。。 ( 积分: 50 )

  • 主题发起人 主题发起人 yangqin
  • 开始时间 开始时间
Y

yangqin

Unregistered / Unconfirmed
GUEST, unregistred user!
现在在 Static 控件上显示了一个位图,需要再在上面画矩形(矩形内部不能覆盖位图),要能改变矩形的位置的和大小。
还有直线也是这个问题,需要能移动直线并改变直线长度和显示角度。
刚开始学VC++,
真不知道这是个简单问题还是复杂问题。。。
 
现在在 Static 控件上显示了一个位图,需要再在上面画矩形(矩形内部不能覆盖位图),要能改变矩形的位置的和大小。
还有直线也是这个问题,需要能移动直线并改变直线长度和显示角度。
刚开始学VC++,
真不知道这是个简单问题还是复杂问题。。。
 
1.画矩形(矩形内部不能覆盖位图):如果直接使用Rectangle函数,那么就要选择画刷为非填充模式;或者使用画线函数
2.在画矩形或直线时要动态改变,也有两种方法:一种比较偷懒,但是会造成闪烁,就是在鼠标WM_MOUSEMOVE时,先将背景进行重画,然后在调用你要画的函数;还有一种要通过SetROP2函数,设置异或模式,但是方法相比前一种较为复杂,但是效果肯定好
 
TO amender
这位大哥:
能不能说说怎么设置SetROP2函数啊?
最好有源码, :)!
要做东西,没办法啊!
 
不知道我看懂意思了没有,把画好的矩形和直线的位置信息保存下来吧,再根据鼠标的位置和动作重画就好了;
保存位置信息要选取一些关键的信息,比如直线保存两个端点,矩形就保存四个
 
其实可能有些误区,所谓鼠标选中某个图形,然后移动图形,不是因为图形本身响应鼠标,要知道在Windows里面响应消息最基本是需要窗口句柄(好像是的),你不可能为每个对象都分配这个东西,因为资源是有限的,所以通常的作法是,你保存这些图形的位置,鼠标移动过去的时候判断谁最近,然后处理这个图形,比如说是一条折线,那么就把这条折线画红等等,然后你自己处理托动的效果,希望对你有用
 
你可以采取图片叠加的方式,也就是用三个位图,一个是底图,一个画矩形,一个画直线,重叠西显示,这样用户看到的就像是一幅图像,矩形或直线需要改变的时候,改变相应图片的内容即可,保存的时候把画矩形和直线的图片上的图象拷贝到底图上即可,
就像photoshop中的图层一样!
 
多人接受答案了。
 
后退
顶部