明日书架上的《Visual C++程序开发实例宝典》第10章第510页的实例284的“打印简历”不显示图片,仅显示出文字。代码是书中原配的,我没有作任何改动,编译运行后也没有出现错误提示。现把截图和源文件包发给您,请帮忙解决。如下图所示:
--------------------------------------------------------------------------------------------------
HBITMAP CPrintResumeDlg::GetBitmapFromField()
{
if ((! m_pRecord->ADOEOF)&&(!m_pRecord->BOF))
{
_variant_t m_bitdata;
static char* m_bitbuffer;
char* m_buffer = NULL;
char* temp = NULL;
long m_factsize = m_pRecord->GetFields()->GetItem("照片")->ActualSize;
//获取位图所有数据
m_bitdata = m_pRecord->GetFields()->GetItem((long)9)->GetChunk(m_factsize);
HBITMAP m_hmap ;
if (m_bitdata.vt==(VT_ARRAY |VT_UI1))
{
//定义一个数据缓冲区
m_bitbuffer = new char[m_factsize];
ZeroMemory(m_bitbuffer, m_factsize);
//将m_buffer指向m_bitdata
SafeArrayAccessData(m_bitdata.parray, (void**)&m_buffer);
//复制位图数据到m_bitbuffer;
memcpy(m_bitbuffer, m_buffer, m_factsize);
SafeArrayUnaccessData(m_bitdata.parray);
void* m_factbitdata; //实际的位图数据
//temp指向位图信息头
temp = m_bitbuffer + sizeof(BITMAPFILEHEADER) + 74;
BITMAPINFOHEADER * pBitmapInfoHeader = (BITMAPINFOHEADER*)(i + temp);
//获取位图信息,它包括位图信息头和调色板
BITMAPINFO* pBitmapInfo = (BITMAPINFO*)(i + temp);
//获取位图的实际数据
m_factbitdata = (void*)(m_buffer + ((LPBITMAPFILEHEADER)(74 + m_bitbuffer))->bfOffBits);
CClientDC m_dc(this);
//创建位图
//auto hdc = ::GetDC(GetSafeHwnd()); //m_dc.GetSafeHdc(), // hdc
hbitmap = CreateDIBitmap(
m_dc.GetSafeHdc(),
pBitmapInfoHeader, // *header
CBM_INIT, // CBM_INIT
m_factbitdata, // 数据
pBitmapInfo, // BITMAPINFO*
DIB_RGB_COLORS);
if (!hbitmap) {
CString str;
str.Format(_T("创建设备同样关位图失败, GLE=%d"), GetLastError());
AfxMessageBox(str);
}
delete[] m_bitbuffer;
}
}
return hbitmap;
}
--------------------------------------------------------------------------------------------------
把文件printResumeDlg.cpp中的函数代码换成上面的代码。
数据库文件就是 ResumeInfo.mdb 如果 使用Access打开之后看不到数据表,可能表被隐藏了。
Administrator 发表于2016-12-22 11:18
感谢您一直以来的支持!
您在学习中遇到问题可以随时在社区发帖提问,我们会积极处理~
由于编程语言运行环境的不断更新、电脑系统环境不断变化等原因,会导致某些实例在运行时产生不同的报错,这些问题不管是学习还是工作中都会遇到,请不要气馁,遇到问题,我们一起来解决~
加油!我们也会继续努力!
显示隐藏数据表的方法:
打开ResumeInfo.mdb之后, 在 “所有表”上单击右键,选择 “导航选项”,在打开的对话框中 选中 “显示隐藏对象”。 之后可以看到数据表 “Resume”。
双击打开此表,其中的照片列就是之前没有显示出来的照片。 可以双击该列中的某一项,查看照片。