我用一下方法显示图片CString temStr;
temStr.Format("Header/%s",info.strHeaderPath);
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,temStr.GetBuffer(0),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
CBitmap *temBitmap=CBitmap::FromHandle(hBitmap);
if (temBitmap)
{
CDC dcPic;
dcPic.CreateCompatibleDC(pDc);
dcPic.SelectObject(temBitmap);
pDc->BitBlt(2,1,32,32,&dcPic,0,0,SRCCOPY);
temBitmap->DeleteObject();
dcPic.DeleteDC();
temBitmap = NULL;
}所有的方便都调用成功,图片路径也是对的
但有时候显示的不是原来的图片,而是一个类似于下拉框的东西,不知道为什么??????????

解决方案 »

  1.   

    可能是绘图的问题,你绘图的代码没有放在OnPaint中吧
    这样一刷新界面,刚才绘图就清除掉了。
    会不会是对话框就有个下拉框呢?
      

  2.   

    是在:OnPaint里面,就是有时候才奇快,就是显示一个小方框里面有个小黑钩
      

  3.   

    info.strHeaderPath
    看下路径是不是每次都一样的?
      

  4.   

    pDc->BitBlt(2,1,32,32,&dcPic,0,0,SRCCOPY);
    你图片的大小是2,1,32,32吗?
      

  5.   

    看看是不是GDI资源没有释放的问题
      

  6.   

    这就是了,你的图片没有全部显示出来,用StretchBlt,缩放位图
      

  7.   

    CString temStr;
    temStr.Format("Header/%s",info.strHeaderPath);
    HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,temStr.GetBuffer(0),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    CBitmap *temBitmap=CBitmap::FromHandle(hBitmap);
    if (temBitmap)
    {
        CDC dcPic;
        dcPic.CreateCompatibleDC(pDc);
        dcPic.SelectObject(temBitmap);
        pDc->BitBlt(2,1,32,32,&dcPic,0,0,SRCCOPY);
        temBitmap->DeleteObject();
        dcPic.DeleteDC();
        temBitmap = NULL;
    }有完整点的吗?在哪绘制的,怎么调用的。
    正常的图能帖一个上来吗?
      

  8.   

    贴个完整的,事实上我要实现一张图,平铺到一个窗口背景上void CShowDlg::OnPaint()
    {
    CPaintDC dc(this); // device context for painting
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CDialog::OnPaint()
    CRect reClient;
    GetClientRect(&reClient); CDC dbDc;
    CBitmap dbBitmap;
    dbDc.CreateCompatibleDC(&dc);
    dbBitmap.CreateCompatibleBitmap(&dc,reClient.Width(),reClient.Height());
    dbDc.SelectObject(&dbBitmap);
    dbDc.FillSolidRect(0,0,reClient.Width(),reClient.Height(),0xFFFFFF); CString strName;
    strName.Format("ROOMSHOWBK/%u.bmp",201);
    HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,strName.GetBuffer(0),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    CBitmap *temBitmap=CBitmap::FromHandle(hBitmap);
    if (temBitmap)
    {
    BITMAP bitmapInfo;
    temBitmap->GetBitmap(&bitmapInfo);
    CDC dcPic;
    dcPic.CreateCompatibleDC(&dc);
    dcPic.SelectObject(temBitmap);
    //拉伸显示
    int ix = 0,iy = 0;
    int iHeight = reClient.Height();
    while(iHeight>0)
    {
    int iWidth = reClient.Width();
    ix = 0;
    while(iWidth>0)
    {
    dbDc.BitBlt(ix*bitmapInfo.bmWidth,iy*bitmapInfo.bmHeight,min(iWidth,bitmapInfo.bmWidth),
    min(iHeight,bitmapInfo.bmHeight),&dcPic,0,0,SRCCOPY);
    iWidth = iWidth-bitmapInfo.bmWidth;
    ix++;
    }
    iHeight = iHeight-bitmapInfo.bmHeight;
    iy++;
    } dcPic.DeleteDC();
    temBitmap->DeleteObject();
    }
    dc.BitBlt(0,0,reClient.Width(),reClient.Height(),&dbDc,0,0,SRCCOPY);
    dbBitmap.DeleteObject();
    dbDc.DeleteDC();
    }
      

  9.   

    首先,请确保路径是正确的!
    其次,你的代码有问题,在多次调用的时候,估计会出现显示不对,颜色不对等GDI资源混乱的问题!
    if (temBitmap)
    {
        CDC dcPic;
        dcPic.CreateCompatibleDC(pDc);
        dcPic.SelectObject(temBitmap);
        pDc->BitBlt(2,1,32,32,&dcPic,0,0,SRCCOPY);
        temBitmap->DeleteObject();
        dcPic.DeleteDC();
        temBitmap = NULL;
    }
    这里面,这样是不行的,这样改:
    if (temBitmap)
    {
        CDC dcPic;
        dcPic.CreateCompatibleDC(pDc);
        CBitmap *oldbmp = dcPic.SelectObject(temBitmap);
        pDc->BitBlt(2,1,32,32,&dcPic,0,0,SRCCOPY);
        dcPic.SelectObject(oldbmp);//取消关联后才能删除
        temBitmap->DeleteObject();//如果不取消关联,删除实际上是失败的,这样的后果,GDI资源没有释放!
        dcPic.DeleteDC();
        temBitmap = NULL;
    }
      

  10.   

    看了你在19楼的回贴,发现里面还有一处!
    dbDc.SelectObject(&dbBitmap);也一样将以前的设备状态保存以备恢复!记住一点,GDI资源使用后不仅仅要释放,还要恢复!