我创建了一个类CDIB:如下
// DIB.cpp: implementation of the CDIB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "DIB.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CDIB::CDIB()
{
m_pBMI = NULL;
m_pDIBData = NULL;
}CDIB::~CDIB()
{
if (m_pBMI != NULL)
delete m_pBMI;
if (m_pDIBData != NULL)
delete m_pDIBData;
}BOOL CDIB::LoadFromFile(LPCTSTR lpszFileName)
{
CFile file;
BITMAPINFO* pBMI = NULL;
BYTE* pDIBData = NULL; if (!file.Open(lpszFileName, CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox("打不开文件!");
return FALSE;
} BITMAPFILEHEADER bfh;
if (file.Read(&bfh, sizeof(bfh)) != sizeof(bfh))
{
AfxMessageBox("读文件出错!");
return FALSE;
} if (bfh.bfType != 0x4d42)
{
AfxMessageBox("不是BMP文件!");
return FALSE;
}
BITMAPINFOHEADER bih;
if (file.Read(&bih, sizeof(bih)) != sizeof(bih))
{
AfxMessageBox("读文件出错!");
return FALSE;
}
if (bih.biBitCount != 24)
{
AfxMessageBox("不是24位真彩色位图!");
return FALSE;
}
pBMI = (BITMAPINFO*) new char[sizeof(BITMAPINFOHEADER)];
if (!pBMI)
{
AfxMessageBox("分配内存出错!");
return FALSE;
}
memcpy(pBMI, &bih, sizeof(BITMAPINFOHEADER)); DWORD dataBytes = bfh.bfSize - bfh.bfOffBits;
pDIBData = (BYTE*) new char[dataBytes];
if (!pDIBData)
{
AfxMessageBox("分配内存出错!");
delete pBMI;
return FALSE;
}
if (file.ReadHuge(pDIBData, dataBytes) != dataBytes)
{
AfxMessageBox("读文件出错!");
delete pBMI;
delete pDIBData;
return FALSE;
}
file.Close();
if(m_pBMI != NULL)
delete m_pBMI;
m_pBMI = pBMI;
if (m_pDIBData != NULL)
delete m_pDIBData;
m_pDIBData = pDIBData; return TRUE; }void CDIB::ShowDIB(CDC* pDC, int nLeft, int nTop, int nWidth, int nHeight)
{
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),
nLeft,
nTop,
nWidth,
nHeight,
0,
0,
GetDIBWidth(),
GetDIBHeight(),
m_pDIBData,
m_pBMI,
DIB_RGB_COLORS,
SRCCOPY);
}
然后在
void CMYOBJECTDlg::YW_InitDlgBtn()
{
//Draw the bitmap of main view
m_dib.LoadFromFile("MYBACKGROUND.bmp");
}
然后在初始化中中调用该函数YW_InitDlgBtn()为何得不到该背景图片MYBACKGROUND.bmp
// DIB.cpp: implementation of the CDIB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "DIB.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CDIB::CDIB()
{
m_pBMI = NULL;
m_pDIBData = NULL;
}CDIB::~CDIB()
{
if (m_pBMI != NULL)
delete m_pBMI;
if (m_pDIBData != NULL)
delete m_pDIBData;
}BOOL CDIB::LoadFromFile(LPCTSTR lpszFileName)
{
CFile file;
BITMAPINFO* pBMI = NULL;
BYTE* pDIBData = NULL; if (!file.Open(lpszFileName, CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox("打不开文件!");
return FALSE;
} BITMAPFILEHEADER bfh;
if (file.Read(&bfh, sizeof(bfh)) != sizeof(bfh))
{
AfxMessageBox("读文件出错!");
return FALSE;
} if (bfh.bfType != 0x4d42)
{
AfxMessageBox("不是BMP文件!");
return FALSE;
}
BITMAPINFOHEADER bih;
if (file.Read(&bih, sizeof(bih)) != sizeof(bih))
{
AfxMessageBox("读文件出错!");
return FALSE;
}
if (bih.biBitCount != 24)
{
AfxMessageBox("不是24位真彩色位图!");
return FALSE;
}
pBMI = (BITMAPINFO*) new char[sizeof(BITMAPINFOHEADER)];
if (!pBMI)
{
AfxMessageBox("分配内存出错!");
return FALSE;
}
memcpy(pBMI, &bih, sizeof(BITMAPINFOHEADER)); DWORD dataBytes = bfh.bfSize - bfh.bfOffBits;
pDIBData = (BYTE*) new char[dataBytes];
if (!pDIBData)
{
AfxMessageBox("分配内存出错!");
delete pBMI;
return FALSE;
}
if (file.ReadHuge(pDIBData, dataBytes) != dataBytes)
{
AfxMessageBox("读文件出错!");
delete pBMI;
delete pDIBData;
return FALSE;
}
file.Close();
if(m_pBMI != NULL)
delete m_pBMI;
m_pBMI = pBMI;
if (m_pDIBData != NULL)
delete m_pDIBData;
m_pDIBData = pDIBData; return TRUE; }void CDIB::ShowDIB(CDC* pDC, int nLeft, int nTop, int nWidth, int nHeight)
{
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),
nLeft,
nTop,
nWidth,
nHeight,
0,
0,
GetDIBWidth(),
GetDIBHeight(),
m_pDIBData,
m_pBMI,
DIB_RGB_COLORS,
SRCCOPY);
}
然后在
void CMYOBJECTDlg::YW_InitDlgBtn()
{
//Draw the bitmap of main view
m_dib.LoadFromFile("MYBACKGROUND.bmp");
}
然后在初始化中中调用该函数YW_InitDlgBtn()为何得不到该背景图片MYBACKGROUND.bmp
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货