我在内存DC里绘图的时候用的是MM_ISOTROPIC模式,即可以自己定义比率、绘图原点,我把原点定在左下角,Y轴正方向向上。
可画完后拷贝到实际DC时,图像总是变成以左上角为原点了,并且Y正方向变成了向下的。
我想可能是外部还是以默认的MM_TEXT模式给绘制了。
能不能在StretchBlt拷贝的时候把纵向坐标变一下啊?

解决方案 »

  1.   

    把设备dc跟内存dc做一样的设置不就可以了
      

  2.   

    但是这样子由于我用的是MM_ISOTROPIC绘图模式,一个像素要用100甚至1000个单位来绘制,所设置的Bitmap就很大,例如:
    bitmap.CreateCompatibleBitmap(&dc, rectClient.Width()*PRE, rectClient.Height()*PRE);
    这个比率PRE我至少要100以上,这时我的程序甚至会弹出内存不足,或者是不能创建。
    有没有办法解决啊
      

  3.   

    直接用内存dc就行了啊,为什么要用CreateCompatibleBitmap;
    CLientDC dc(this);
    CDC* memoryDC = new CDC;
    memoryDC->CreateCompatibleDC(&dc);
    memoryDC->SelectObject(&bitamp);
    dc.StretchBlt(x, y, cx, cy, memoryDC, 
    bitmapX, bitmapY, bitmapCX, bitmapCY, SRCCOPY);
      

  4.   

    使用内存DC不用创建兼容图像吗?
    如果不用这句memoryDC->SelectObject(&bitamp);
    中的bitamp是什么啊?
    我看网上的例子都要创建的啊
      

  5.   

    bimap就是直接用
    CBitmap bitmap
    bitmap.LoadBitmap(ID)
    载入的啊,我都是这样创建的
    也没有问题,我也是菜鸟,希望有高人指点
      

  6.   

    可以,StretchBlt可以把高度设为负数,就是垂直翻转
      

  7.   

    设置的时候变一下就行了啊:pDC->SetMapMode(MM_ISOTROPIC);
    pDC->SetWindowOrg((int)(-m_fXOrg*PRECISION),(int)(m_fYOrg*PRECISION));
    pDC->SetWindowExt(PRECISION,-PRECISION);
    pDC->SetViewportExt(1,1);