我的画图程序中,当拖动一个图形(例如矩形)从另外的图形上(例如椭圆)拖过,就会把另外的那个图形(椭圆)擦除了,怎么才能避免这种情况???

解决方案 »

  1.   

    移动是在鼠标的Move事件中完成的,
      

  2.   

    那你改变窗口大小的时候是不是另外的图形也不见了?保存图形的信息,然后再在OnPaint里画图吧
      

  3.   

    频繁调用OnPaint屏幕闪烁太厉害了,有别的方法吗?
      

  4.   

    频繁调用OnPaint屏幕闪烁太厉害了,有别的方法吗?
    -------------------------
    那你还想怎么样,双缓冲加保存重绘
      

  5.   

    创建一个透明的画刷,然后选到设备描述表中就可以了,代码如下:
    cbrush* pbrush=cbrush::fromhandle((hbrush)getstockobject(null_brush));
    dc.selectobject(pbrush);具体可以参考MSDN。
      

  6.   

    创建一个内存DC
    如下:
        GetClientRect(&RectFirst);
    pDCFirst=GetDC(); WidthFirst =RectFirst.Width();
    HeightFirst = RectFirst.Height();
    XLast = WidthFirst - 50; 
       
        m_aXout =int( WidthFirst%LN );
        m_Xunit = WidthFirst/LN;
    for( int i = 0;i< LN;i++ )//取得坐标X的对应值
    aXout[i] = m_aXout + i*m_Xunit;
        m_nYb = RectFirst.bottom - 30;//原点Y坐标  pMemDCFirst = new CDC;
    pMemDCFirst->CreateCompatibleDC( pDCFirst );
    cBitmapFirst.CreateCompatibleBitmap( pDCFirst, WidthFirst, HeightFirst );
    pMemDCFirst->SelectObject(&cBitmapFirst);然后把要做的动作先在pMemDCFirst 画好
    最后在onpaint中贴出来
    如下:
    CPaintDC dc(this);
    if( pMemDCFirst == NULL )
    {
    CreatBuffer();
    MyDrawCoordinate();
    }
      // if ( bSign == True )
    pDCFirst->BitBlt( 0, 0 , WidthFirst, HeightFirst, pMemDCFirst, 0,0, SRCCOPY);应该就没有问题了