明日书架上的《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”。
双击打开此表,其中的照片列就是之前没有显示出来的照片。 可以双击该列中的某一项,查看照片。

 
	
                                                 VIP会员
VIP会员 购物车
购物车


 私信
                         私信 
                     
					 
					 
					 发表新帖
发表新帖 立即签到
立即签到
 
        		  
        		 
         		 关注
关注
                  回复
 回复 支持(
                	支持( 反对(
                    反对(

 
               			  
               			  已解决
已解决 
                    

 谢谢老师了!
谢谢老师了! 是否表示正常了呢?谢谢老师
是否表示正常了呢?谢谢老师 
                







 
                     
                     
					 
						 
						 
						 
						