VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 473|回复: 2

新手问题望大家帮忙看看,我调试了好几天成功了但是没有结果

[复制链接]

3

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-6 05:40:01 | 显示全部楼层 |阅读模式
这是CDib类里的构造函数

CDib::CDib(char * dibFileName)
{
    size=0;
strcpy(m_fileName, dibFileName);
    LoadFile(m_fileName);
}



这是CDib类里的加载函数


void CDib::LoadFile(const char* dibFileName)
{   strcpy(m_fileName,dibFileName);
    CFile dibFile;
    dibFile.Open(m_fileName, CFile::modeRead|CFile::typeBinary);
    dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));//此处为C点,调试到此处就又回到了void CBmp2View::OnDraw(CDC* pDC)不会往下执行
    if (bitmapFileHeader.bfType == 0x4d42)
    {
        DWORD fileLength = dibFile.GetLength();   
                size = fileLength -sizeof(BITMAPFILEHEADER);
                pDib =(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE, size);
        dibFile.Read((void*)pDib, size);
        dibFile.Close();
        m_pBitmapInfo = (BITMAPINFO*) pDib;
        m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib;
        m_pRGB = (RGBQUAD*)(pDib + m_pBitmapInfoHeader->biSize);
        int m_numberOfColors = GetNumberOfColors();
        if (m_pBitmapInfoHeader->biClrUsed == 0)
            m_pBitmapInfoHeader->biClrUsed = m_numberOfColors;
        DWORD colorTableSize = m_numberOfColors * sizeof(RGBQUAD);
        m_pData = pDib + m_pBitmapInfoHeader->biSize + colorTableSize;
                if (m_pRGB == (RGBQUAD*)m_pData) m_pRGB = NULL;
        m_pBitmapInfoHeader->biSizeImage = GetSize();
                m_valid = true;
    }   
    else
    {
        m_valid = false;
        AfxMessageBox("This isn't a bitmap file!");
    }
}

这是在CView类里想用来显示的函数
void CBmp2View::OnDraw(CDC* pDC)//此处为A点
{
        CBmp2Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
        CDib cdib("c:\try.bmp");//此处为B点 ,又跳回到A
        BYTE *pBitmapData = cdib.GetData();
        LPBITMAPINFO pBitmapInfo=cdib.GetInfo();
    pDC=GetDC();
        ::StretchDIBits(pDC->GetSafeHdc(),
                0,0,500,500,
                0,0,500,500,
                pBitmapData,pBitmapInfo,DIB_RGB_COLORS,SRCCOPY);
}

编译可以构建EXE都可以,就是不会显示图像
调试后发现总是在A点和B点间转来转去,其中B点的CDib cdib("c:\try.bmp")函数执行到其内部的C点就不再跳出了回到A点
回复

使用道具 举报

0

主题

25

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-1-6 17:45:01 | 显示全部楼层

CDib cdib("c:\try.bmp");//此处为B点 ,又跳回到A
移到CBmp2View的构造函数或OnInitialUpdate()里试试.
回复

使用道具 举报

3

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-10 15:36:01 | 显示全部楼层
谢谢,不过还是不行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表