单文档应用程序,在OnDraw函数中添加如下代码:void CBmpView::OnDraw(CDC* pDC)
{
CBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HBITMAP bitmap,oldBitmap;
    bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"123.bmp",IMAGE_BITMAP,
                0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION );
CDC MemDC;
       MemDC.CreateCompatibleDC(pDC);    oldBitmap=(HBITMAP)MemDC.SelectObject(&bitmap);    CRect rect;
   GetClientRect(&rect);
   pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);    MemDC.SelectObject(&oldBitmap);
}
程序没有错误,可是就是没有显示,不知道为什么?
 哪位帮我看看,程序很简单的呀!

解决方案 »

  1.   

    判断返回的句柄bitmap是否为空
    如果为空,去掉 | LR_CREATEDIBSECTION 试试看
    另外,加载123.bmp,最好使用完整的绝对路径,如C:\123.bmp
      

  2.   

    MemDC.SelectObject(&bitmap); //函数要传入一个 CBitmap 对象,而不是 HBITMAP。改为这样试试:oldBitmap = (HBITMAP)SelectObject(MemDC.m_hDC, bitmap);
    ...
    SelectObject(MemDC.m_hDC, oldBitmap);
      

  3.   

    bitmap不是空的,而且绘制位图的这句话pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); 
    都已成功,返回值不为0.
    使用完整路径也不行呀,试着去掉 | LR_CREATEDIBSECTION ,还是不行好奇怪
      

  4.   

    谢谢lwx300 ,确实是这样的。非常感谢