读写文件、控件显示和操作一切正常,只是通过DC绘制的图形不能正常显示。在线等,解决即结贴!

解决方案 »

  1.   

    我没有用到MFC之外的东西,只用了普通的CDC的一些接口,不管是画线,还是描点都不行。
      

  2.   

    CUniEditorDlg::CUniEditorDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CUniEditorDlg::IDD, pParent)
    {
    m_pBitmap = new CBitmap;
    m_pBitmap->CreateBitmap(rcMap.right, rcMap.bottom, 2, 16, NULL);
    m_dcMemory.CreateCompatibleDC(NULL);
    ..........
    }
    OnPaint中
    CBitmap *poldBitmap1 = m_dcMemory.SelectObject((CBitmap *)m_pBitmap);
    m_dcMemory.SelectStockObject(BLACK_BRUSH);
    m_dcMemory.SelectStockObject(BLACK_PEN);
    m_dcMemory.Rectangle(&rcMap);
    m_dcMemory.SetPixel(h, v, m_clDraw[3]);
    m_dcMemory.SelectObject(&pen);
    m_dcMemory.MoveTo(lLine, v);
    m_dcMemory.LineTo(h, v);
    m_dc.BitBlt(rcMap.left+ptMap.cx, rcMap.top+ptMap.cy, 
    rcMap.right+ptMap.cx, rcMap.bottom+ptMap.cy,
    &m_dcMemory, 0, 0, MERGECOPY);
    大致就用了这几个,画线、描点、画矩形都 不行 
      

  3.   

    难道就只能在2000下重新编译了吗?有没有人通过修改库和WINDOWS版本解决这个问题?我昨天把程序用到的库都拷过去也不行
      

  4.   

    CBitmap是设备相关位图。若位图格式与当前设备的显示模式不一样的话,就显示不出来。对比一下你图片的格式和屏幕的颜色深度是否一致。
    还有一个可能:
    如果你用的是盗版的VC,有时候VC环境会出问题。必须重新安装VC才能解决,有时候甚至需要重新安装系统。
      

  5.   

    CreateBitmap()函数中的参数与操作系统版本有关系
      

  6.   

    问题已解决,谢谢各位!// xp, 2003下2可以
    CreateBitmap(rcMap.right, rcMap.bottom, 2, 16, NULL);// 2000下1可以
    CreateBitmap(rcMap.right, rcMap.bottom, 1, 16, NULL);
      

  7.   

    为了实现OS兼容,最好使用CreateCompatibleBitmap,已经通过。详参MSDN