要求:vc中实现鼠标左键点击处绘制出一个圆并以圆心为起点画出一条水平线,鼠标左键点在直线上,按住鼠标左键可拖动直线旋转;如果不点在直线上,重新绘制圆位置和水平线。有程序代码,可以实现立即给分。谢谢

解决方案 »

  1.   

    圆心、半径、线段长度以及和鼠标位置的关系,这些整理好了,就是调用几个GDI函数的问题,画圆用Ellipse,画线用MoveTo/LineTo等,要旋转就计算角度修改坐标。
      

  2.   

    难是不难 主要是算法,LZ主要把GDI学习一下
      

  3.   

    有以下几种方式供你选择:
    1、做起来最简单,但是,刷新很闪,就是不停的画圆,画线,这种方法很少用!
    2、用DC的XORP方式画图(好像是这种方式,具体楼主自己查),就是在拖动的过程中,先擦除上次画的,然后,再画新的!缺点是,控制不好就擦不干净!优点是速度快!
    3、用贴图来画,必须双缓冲,这种画比较好,优点就是不闪,缺点是实现起来,特别是刚开始,挺累的!
      

  4.   

    一直没搞懂双缓冲到底怎么缓冲,我都是用的“单缓冲”。就是一个内存DC 作为CView的背景画布。
    OnDraw中直接直接拷贝背景DC过来就行了。这就是我的“单缓冲”动态拖动直线,拖动物件的时候,再添加一个备份DC用来保存拖动之前的背景图像,
    在鼠标移动时,最好不要在内存背景DC上画图,这样做你的程序会非常慢。(要经过3次BitBlt),
    应该是先用备份DC直接覆盖Cview,然后直接在Cview的DC上画图。 
    最后鼠标弹起时再把最终的图像画到内存背景DC上。
    这个方法要处理一些细节问题,慢慢调试吧。微软的画图程序用的并不是这个方法,(我观察CPU得出结论的,微软的画图程序在画长斜直线时,CPU占用很高,而我的程序画长斜直线时CPU几乎没什么占用)
    我估计它是在鼠标移动时,在内存背景DC上画的图,图像的拷贝做了脏矩形优化。
     
      

  5.   

       建议楼主多看一下GDI方面的书,应该不会很难