如何才能使画好的图形(如圆)通过鼠标来实现在视图上的移动。谢谢。最好有代码。

解决方案 »

  1.   

    源程序下载        
    串行化(Serialization)示范例子 有详细代码
    http://www.vckbase.com/code/listcode.asp?mclsid=1&sclsid=&page=2
      

  2.   

    把要画的内容放在一个memdc上,根据移动量来bitblt到不同的位置,一劳永逸
      

  3.   

    faint.vc6技术内幕,的dc部分不就是围绕这个问题的吗??唉,为什么不多看看书呢。
      

  4.   

    这个有好多办法,最差的也是最方便的就是调用Invalidate()了,这样的话屏幕闪烁的很厉害
    稍微好点就是用异或的方式把上一个圆重画一下就看不到了,解决闪烁问题的最好的方法就是楼上有人说的,在内存DC中画,下面是一段简单的代码:
    CDC memDC;//内存DC
    CBitmap bitmap;
    CBitmap* pOldBitmap; CRect clientrect;//客户区的大小
    GetClientRect(&clientrect); int width = clientrect.Width();//客户区的宽
    int height = clientrect.Height();//客户区的高 memDC.CreateCompatibleDC(pDC);//创建一个依附与pDC的内存memDC
    bitmap.CreateCompatibleBitmap(pDC, width, height);//创建一个位图,大小和客户区一样
    pOldBitmap = memDC.SelectObject(&bitmap);//把位图选入内存DC CBrush brush;
    brush.CreateSolidBrush(RGB(255,255,255));//创建白色刷子
    memDC.FillRect(&clientrect,&brush);//填充内存DC,以便与获得跟pDC一样的背景
    pDC->BitBlt(0,0,width,height,&memDC,0,0,SRCCOPY);//把内存DC复制到pDC,双缓冲技术减少闪烁,我们在内存中画图然后复制到要显示的DC中
    memDC.SelectObject(pOldBitmap);
    memDC.DeleteDC();
      

  5.   

    topYellow(zoufeng)兄的代码是正解,
    我来为你呐喊助威!
      

  6.   

    看看MSDN下的一个DRAWCLI的例子
    ALL in ONEMay you succeed!
      

  7.   

    : topYellow(zoufeng) 说的好~!!