313上位机VC MFC实现带图片简历的打印功能
带图片简历的打印功能
功能展示
找工作打印一简历准备面试,我们都有经历过,我们当前例程实现简历的打印功能,效果如图,程序运行会从数据库中读取简历数据信息并显示在程序 界面上,数据库有带图片的也读取图片显示,没有侧显示默认的图片,点击<前一简历><下一简历>可浏览数据库中的简历,点击<打印当前简历>可打印出当前的简历;
要点提示
我们当前例程简历的文本数据是从数据库中直接读取显示,但图片的读取与显示会麻烦些,图片信息在数据库中 是以二进制的形式进行存储,获取图片信息可先获取 图片占用的空间大小,再根据其占用大小调用ADO对象的GetChunk函数获取 ,具体可参阅我们例程GetBitmapFromField()函数内代码;此函数最终获得数据库中指定字段 图片 的HBITMAP类型句柄,此句柄在DrawReport()函数中加载显示出来;
实现功能
1.新建基于对话框的应用程序
2.在主对话框中添加成员变量及两自定义函数DrawReport() GetBitmapFromField()
public:
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRecord;
BOOL m_bIsInitial;
HBITMAP m_hBitmap;
int m_nScreenX,m_nScreenY;
public:
void DrawReport(CDC* pDC,CRect rect,BOOL isPrinted);
HBITMAP GetBitmapFromField();
3.在构造函数中初始化 m_bIsInitial = FALSE; m_hBitmap = 0;在OnInitDialog()函数中连接与打开数据库并进一步初始化成员变量
AfxOleInit();
m_pCon.CreateInstance(__uuidof(Connection));
m_pRecord.CreateInstance(__uuidof(Recordset));
m_pCon->ConnectionString = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=ResumeInfo.mdbersist Security Info=False";
try
{
m_pCon->Open("","","",-1);
}
catch(...)
{
AfxMessageBox("数据库连接失败");
PostQuitMessage(WM_QUIT);
}
CString sql = "select * from resume";
m_pRecord->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
//<>
m_bIsInitial = TRUE;
m_hBitmap = GetBitmapFromField();
4.在stdafx.h中添加ADO数据库的支持代码
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename_namespace ("ADODB") rename("EOF","ADOEOF")
using namespace ADODB;
5.载入一位图IDB_BITMAP1用于简历的默认显示图片,添加三按钮<前一简历><下一简历><打印当前简历>分别关联按钮的点击函数
void CGkbc8Dlg::OnPrint() //打印当前简历
{
CDC PrinterDC ;
CPrintDialog pdlg(FALSE);
if (pdlg.DoModal()==IDOK)
{
PrinterDC.Attach(pdlg.GetPrinterDC());
CDC* tempDC = GetDC();
CRect rect;
GetClientRect(rect);
OnPaint();
DrawReport(&rinterDC,rect,TRUE);
}
}
void CGkbc8Dlg::OnBnext()
{
if (m_pRecord->ADOEOF==FALSE)
{
m_pRecord->MoveNext();
if (m_pRecord->ADOEOF)
m_pRecord->MoveLast();
m_hBitmap = GetBitmapFromField();
OnPaint();
}
}
void CGkbc8Dlg::OnPrev()
{
if (! m_pRecord->BOF)
{
m_pRecord->MovePrevious();
if(m_pRecord->BOF)
m_pRecord->MoveFirst();
m_hBitmap = GetBitmapFromField();
OnPaint();
}
}
两自定义函数DrawReport() GetBitmapFromField()函数体部分过长,读者可打开例程工程进行查阅与复制使用
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|