void CTestDipView::OnDraw(CDC* pDC)
{
CTestDipDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

    if(m_bIsBMPReady)
{
        DrawDIB(pDC,m_phDIB,m_pPal,0,0);
} // 指向DIB的指针
LPSTR lpDIB;
    lpDIB = (LPSTR) ::GlobalLock(m_phDIBResult);

    if(m_bIsResult)
{
DrawDIB(pDC,m_phDIBResult,m_pPal,DIBWidth(lpDIB)+10,0);
}
   
}
我的这段程序,运行时,显示处理的图像都给罗列起来了,并没有说是只显示上一步结果.为什么呢?

解决方案 »

  1.   

    不好意思
    没有找到DrawDib函数的定义
    应该是函数的使用有问题。
    学习
    关注
      

  2.   

    void CTestDipView::DrawDIB(CDC *pDC, HGLOBAL phDIB, CPalette *pPal,LONG nX,LONG nY)
    {
        LPVOID lpDIBBits;       
    BOOL bSuccess = FALSE;
    BITMAPINFO &bmInfo = *(LPBITMAPINFO)(phDIB);

    int nColors = bmInfo.bmiHeader.biClrUsed?bmInfo.bmiHeader.biClrUsed:   
    1<<bmInfo.bmiHeader.biBitCount; if(bmInfo.bmiHeader.biBitCount>8)
    lpDIBBits = (LPVOID)((LPWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
    ((bmInfo.bmiHeader.biCompression==BI_BITFIELDS)?3:0));
    else
        lpDIBBits = (LPVOID)(bmInfo.bmiColors+nColors);

    if(pPal&&(pDC->GetDeviceCaps(RASTERCAPS)&RC_PALETTE))
    {
    pDC->SelectPalette(pPal,FALSE);
    pDC->RealizePalette();
    }

    ::SetDIBitsToDevice(pDC->m_hDC,
                    nX,
    nY,
    bmInfo.bmiHeader.biWidth,
    bmInfo.bmiHeader.biHeight,
    0,
    0,
    0,
    bmInfo.bmiHeader.biHeight,
    lpDIBBits,
    (LPBITMAPINFO)phDIB,
    DIB_RGB_COLORS);  
    }
    这是DrawDIB()的定义.