写的一个LoadPicture()方法;
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC *pDC=m_csPicture.GetDC();
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
m_csPicture.GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height (),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,
SRCCOPY);
然后再对话框的initial()中调用它 ,为什么初始化后,看不到载入的位图。

解决方案 »

  1.   

    其中m_csPicture是Picture控件的变量,类型是CStatic,CDC *pDC=m_csPicture.GetDC();
    得到一个dc,然后的操作就都是在OnDraw里面画图的实现一样。这样可以吗
      

  2.   

    CDC *pDC=m_csPicture.GetDC();这样是得不到m_csPicture的DC的
    必须这样
       CWnd   *pWnd   = GetDlgItem(IDC_PRINT_TEXT); //IDC_PRINT_TEXT换为你的
                                                     //PICTURE控件ID
       CDC *pDC = pWnd->GetDC();可能这样也行,没试过   CWnd   *pWnd =  (CWnd   *)m_csPicture;
       CDC *pDC = pWnd->GetDC();
      

  3.   

    但是我看到代码执行的过程中应该是得到picture控件的DC了,坐标都得到了呀,
    用你的方法也还是没能显示出图片来,
      

  4.   

    HBITMAP   hBitmap;   
    CStatic   *pStatic = (CStatic*)GetDlgItem(pictrue控件ID);   
    hBitmap  = (HBITMAP)LoadImage(   
                      AfxGetInstanceHandle(),     
                      MAKEINTRESOURCE(map的ID),      
                      IMAGE_BITMAP,     
                      0,     
                      0,     
                     LR_LOADMAP3DCOLORS);   
              pStatic->ModifyStyle(0xF, SS_BITMAP);   
              pStatic->SetBitmap(hBitmap);   
      

  5.   

    StretchBlt()方法只是调用一次 你在初始的时候如果代码没错的话 就会画一次 但是在显示出来的时候 就被窗体刷新掉了 所以你使用这个函数在画的时候 可以放在paint()消息中处理或用定时器一直画 就可以显示.
    还有就是使用楼上的方法 直接让控件接受图形SetBitmap()方法 不会被刷新掉 可一直显示.