各位帮忙看看下面的代码,问题在最后面有说明。
是不是StretchDIBits用错了?或者改用其他同等复杂度的方法也可CBmp类的定义如下//CBmp类的定义   //CBmp类的定义   //CBmp类的定义   //CBmp类的定义
#include "StdAfx.h"
#include "Bmp.h"CBmp::CBmp(void)
: height(0)
, width(0)
, pData(NULL)
{
pData = NULL;
}CBmp::~CBmp(void)
{
if(NULL != pData)
{
delete pData;
}
}BOOL CBmp::OpenFile(CString fileName)
{
CFile file;
CFileException fe; //打开文件
if(!file.Open(fileName, CFile::modeRead, &fe))
return FALSE; file.Read(&bmpFileHead, sizeof(BITMAPFILEHEADER));
file.Read(&bmpInfoHead, sizeof(BITMAPINFOHEADER)); if(24 == bmpInfoHead.biBitCount)
{
width = bmpInfoHead.biWidth;
height = bmpInfoHead.biHeight;
int BitSize = bmpFileHead.bfSize - bmpFileHead.bfOffBits;
pData = (BYTE*)new char[BitSize];
//pData = new BYTE[BitSize];
file.Close(); //CBitmap bm; 
//bm.m_hObject=(HBITMAP)::LoadImage(NULL,fileName, IMAGE_BITMAP, 500, 400, LR_LOADFROMFILE); return TRUE;
}

//非24位位图,错误返回
MessageBox(NULL, _T("此文件不是24位的位图文件"), _T("系统提示"), MB_ICONWARNING);
return FALSE;
}BOOL CBmp::SaveFile(CString fileName)
{
CFile file;
CFileException fe;

if(!file.Open(fileName, CFile::modeWrite | CFile::modeCreate, &fe))
return FALSE; file.Write(&bmpFileHead, sizeof(BITMAPFILEHEADER));
file.Write(&bmpInfoHead, sizeof(BITMAPINFOHEADER)); int BitSize = bmpFileHead.bfSize - bmpFileHead.bfOffBits;
file.Write(pData, BitSize);
file.Close();

return TRUE;
}void CBmp::Display(CDC* pDC)
{
StretchDIBits(pDC->m_hDC,
0,
0,
width,
height,
0,
0,
width,
height,
pData,
(BITMAPINFO *)&bmpInfoHead,
DIB_RGB_COLORS,
SRCCOPY);
}bmp为CBmp类型变量//bmp为CBmp类型变量 //bmp为CBmp类型变量 //bmp为CBmp类型变量
void CCellHandlerView::OnDraw(CDC* pDC)
{
//得到文档类指针
CCellHandlerDoc* pDoc = GetDocument();
//确认得到文档类指针的正确性
ASSERT_VALID(pDoc);
if(!pDoc)
return ; //绘制矩形
m_tracker.Draw(pDC);
//调用变量bmp的display方法显示位图
bmp.Display(pDC);
}但是在视窗中无法正常显示图片,显示的事一条条密集的竖线,求真相……附上图片