两个对话框拼在一起,一上一下,都是无框架的属性设置为
上面个对话框我是贴图
下面个是用刷子刷个颜色
但效果就是两个对话框拼起来看象是一个对话框,也就是做到颜色的一致
现在颜色是一致了
但贴图的那对话框最底下有个很细的亮条,这样跟下一个对话框拼起来就不像是一个整体了。
那个图片下面是没有亮条的!
后来上一个对话框我也用刷子刷,发现没问题
但就是贴图的时候会这样
请问到底是怎么回事啊?
下面贴出我画图的代码://采用GDI+双缓冲画图
CPaintDC dc(pWnd); 
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bmp;
CRect rc;
pWnd->GetClientRect(&rc);
bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
memdc.SelectObject(&bmp);
bmp.DeleteObject();string strCurPath = GetCurPath();
char strPicPath[MAX_PATH] = {0};
sprintf_s(strPicPath, "%s\\PicData\\%s", strCurPath.c_str(), strPicName); 
Image image( ToWChar(strPicPath) ); //图片路径
Graphics graphics(memdc);graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight()); 
dc.BitBlt(x, y, image.GetWidth(),image.GetHeight(), &memdc, 0, 0, SRCCOPY);

解决方案 »

  1.   


    //采用GDI+双缓冲画图
    CPaintDC dc(pWnd); 
    CDC memdc;
    memdc.CreateCompatibleDC(&dc);
    CBitmap bmp, *pOldBitmap = NULL;
    CRect rc;
    pWnd->GetClientRect(&rc);
    bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());    
    pOldBitmap = memdc.SelectObject(&bmp);
    //bmp.DeleteObject();  //这里为什么要删除对象?string strCurPath = GetCurPath();
    char strPicPath[MAX_PATH] = {0};
    sprintf_s(strPicPath, "%s\\PicData\\%s", strCurPath.c_str(), strPicName); 
    Image image( ToWChar(strPicPath) ); //图片路径
    Graphics graphics(memdc);memdc.FillSolidRect(rc, clrBg); //先用背景色填充, clrBg是背景色
    graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight()); 
    dc.BitBlt(x, y, image.GetWidth(),image.GetHeight(), &memdc, 0, 0, SRCCOPY);
    memdc.SelectObject(pOldBitmap);
      

  2.   

    image的宽高和rc的宽高是否相等, 两种方式不同的地方就是这个了,如果还不对那就可能是Graphics的BUG了
      

  3.   

    dc.BitBlt(x, y, image.GetWidth(),image.GetHeight(), &memdc, 0, 0, SRCCOPY);如果你使用image 的高和度,那么你必须确保 图片的大小与对话框的大小一致,所以这里本身就存在问题。CRect rc;
    pWnd->GetClientRect(&rc);
    bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());    
    pOldBitmap = memdc.SelectObject(&bmp);而在这里,你的画布大小确是跟你的对话框大小一致的我估计,你的对话框比你的图片大。你试着移动一下你的对话框,或者用其它别的窗体,从你的窗口上划过,看看是否留下残影。 如果留下了残影就说明了,出现问题的地方没有画到。