none
无法显示图像的问题 RRS feed

  • 问题

  • 使用的是MFC,我在OnDraw中的代码如下

    	//使用API函数调用位图文件
    	HBITMAP hBitmap=(HBITMAP)SHLoadImageFile(_T("\\Flower.jpg"));
    	if(NULL==hBitmap) return;
    	// CBitmap 对象关联HBITMAP
    	CBitmap bmp;
    	bmp.Attach(hBitmap);
    	// 创建一个与pDC兼容的内存DC
    	CDC memDC;
    	memDC.CreateCompatibleDC(pDC);
    	// 将位图选入内存dc
    	CBitmap *pOldBitmap=memDC.SelectObject(&bmp);
    	
    	//pDC->BitBlt(0,0,240,320,&memDC,0,0,SRCCOPY);
    	pDC->StretchBlt(0,0,240,260,
    		&memDC,0,0,200,150,SRCCOPY);
    
    	//GDI释放内存
    	bmp.Detach();
    	memDC.SelectObject(pOldBitmap);
    	memDC.DeleteDC();
    运行通过,但是没有显示图像,一片空白,该如何解决。
    2010年3月4日 1:19

答案

  • hello,yanghome

    我觉得还是图片路径的问题。

    我用C++新建了一个WM6的MFC dialog-based应用,在OnPaint()消息函数中,运行了你的代码,如下:
     CPaintDC dc(this); // device context for painting
     // TODO: Add your message handler code here
     // Do not call CDialog::OnPaint() for painting messages
     //使用API函数调用位图文件
     HBITMAP hBitmap=(HBITMAP)SHLoadImageFile(_T("\\Flower.jpg"));
     if(NULL==hBitmap) return;
     // CBitmap 对象关联HBITMAP
     CBitmap bmp;
     bmp.Attach(hBitmap);
     // 创建一个与pDC兼容的内存DC
     CDC memDC;
     memDC.CreateCompatibleDC(&dc);
     // 将位图选入内存dc
     CBitmap *pOldBitmap=memDC.SelectObject(&bmp);
     
     //pDC->BitBlt(0,0,240,320,&memDC,0,0,SRCCOPY);
     dc.StretchBlt(0,0,240,260,
      &memDC,0,0,200,150,SRCCOPY);

     //GDI释放内存
     bmp.Detach();
     memDC.SelectObject(pOldBitmap);
     memDC.DeleteDC();

    如果你的更目录下没有Flower.jpg这个图片文件,肯定就不能显示了。
    我是把设备中的“my device”-》“my documents”-》“my pictures”路径下的
    Flower.jpg文件拷贝到了设备根目录下,运行程序,就显示这个图片了。

    当然,在你自己的应用程序中,最好还是使用确定的路径,如:SHLoadImageFile(L\\Program Files\\My Documents\\***.bmp);

    具体可以查看英文论坛中的一个帖子,也说明了你的这个问题,
    http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesnative/thread/e3420a99-3e86-4dff-a0ab-4b058ef3e819/

    希望对你有用。


    施炯
    2010年3月4日 4:31
    版主