int showPic(HDC hdcPrint,CString strURL,float picX,float picY,float picCX,float picCY)
{
CFile file;
CString LocalPicLen;
HGLOBAL hMem;
file.Open(strURL,CFile::modeReadWrite);
DWORD len = file.GetLength();
LocalPicLen.Format(_T("%d"),len);
hMem = GlobalAlloc(GMEM_MOVEABLE,len);
LPVOID pData = NULL;
pData = GlobalLock(hMem);
file.Read(pData,len);
file.Close();
GlobalUnlock(hMem);
CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);
m_pPicture->get_Height(&m_JPGHeight);
m_pPicture->get_Width(&m_JPGWidth);
picX = picX*11.8;
picY = picY*11.8;
m_pPicture->Render(hdcPrint,(int)picX,(int)picY,(int)picCX,(int)picCY,
0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);
return 0;
}
void OnBnClickedPrintcard()
{
// TODO: 在此添加控件通知处理程序代码
HDC hdcprint;
CFont Frontfont,Backfont,font1,font2 ;
int intBold = FW_BOLD;
// if(!m_fiSBold)
// intBold = FW_NORMAL;
int m_fontSize = 50;
CString m_printerFont ="华文中宋";
Frontfont.CreateFont(50, //文字的高度
0, // 由系统根据高宽比选取最佳宽度值
0, //文本的倾斜度为0,表示水平,是一行文字旋转
0, //字体的倾斜度为0
intBold, //字体的粗度
false, //非斜体字,true 可以斜体,文字倾斜度可以实现
false, //无下滑线,true有下划线
0, //无删除线
GB2312_CHARSET, // 表示所用的字符集
OUT_DEFAULT_PRECIS, //输出精度的默认值
CLIP_DEFAULT_PRECIS, //裁剪精度的默认值
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
(LPCSTR)m_printerFont //字体名称
);
// int intBold2 = FW_BOLD;
// if(!m_bisBold)
int intBold2 = FW_NORMAL;
Backfont.CreateFont(50, //文字的高度
0, // 由系统根据高宽比选取最佳宽度值
0, //文本的倾斜度为0,表示水平,是一行文字旋转
0, //字体的倾斜度为0
intBold2, //字体的粗度
false, //非斜体字,true 可以斜体,文字倾斜度可以实现
false, //无下滑线,true有下划线
0, //无删除线
GB2312_CHARSET, // 表示所用的字符集
OUT_DEFAULT_PRECIS, //输出精度的默认值
CLIP_DEFAULT_PRECIS, //裁剪精度的默认值
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
(LPTSTR)"华文中宋" //字体名称
);
font1.CreateFont(75, //文字的高度
0, // 由系统根据高宽比选取最佳宽度值
0, //文本的倾斜度为0,表示水平,是一行文字旋转
0, //字体的倾斜度为0
intBold, //字体的粗度
false, //非斜体字,true 可以斜体,文字倾斜度可以实现
false, //无下滑线,true有下划线
0, //无删除线
GB2312_CHARSET, // 表示所用的字符集
OUT_DEFAULT_PRECIS, //输出精度的默认值
CLIP_DEFAULT_PRECIS, //裁剪精度的默认值
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
(LPCSTR)m_printerFont //字体名称
);
font2.CreateFont(130, //文字的高度
0, // 由系统根据高宽比选取最佳宽度值
0, //文本的倾斜度为0,表示水平,是一行文字旋转
0, //字体的倾斜度为0
intBold, //字体的粗度
false, //非斜体字,true 可以斜体,文字倾斜度可以实现
false, //无下滑线,true有下划线
0, //无删除线
GB2312_CHARSET, // 表示所用的字符集
OUT_DEFAULT_PRECIS, //输出精度的默认值
CLIP_DEFAULT_PRECIS, //裁剪精度的默认值
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
(LPCSTR)m_printerFont //字体名称
);
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "cardinfo";
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;
int retVal = 0;
hdcprint = CreateDC(_T(""),_T(""),NULL,NULL);
if(hdcprint!=0)
{
if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业
{
StartPage(hdcprint); //打印机走纸,开始打印
SaveDC(hdcprint); //保存打印机设备句柄
retVal = showPic(hdcprint,"d:\\front.jpg",0,0,1016,642);
retVal = showPic(hdcprint,"d:\\1.jpg",55,6,263,341);
SelectObject(hdcprint,Frontfont);
float m_iDX =6;
float m_iDY =8;
m_iDX = m_iDX*11.8;
m_iDY = m_iDY*11.8;
CString m_iDText ="姓名: 张三";
SetBkMode(hdcprint,TRANSPARENT);
//SetTextColor(hdcprint,RGB(m_fontColorR,m_fontColorG,m_fontColorB));
TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());//
// SetTextColor(hdcprint,RGB(255,255,255));
// RestoreDC(hdcprint,-1); //恢复打印机设备句柄
EndPage(hdcprint); //打印机停纸,停止打印
retVal = showPic(hdcprint,"d:\\back.jpg",0,0,1016,642);
SetBkMode(hdcprint,TRANSPARENT);
m_iDX =6;
m_iDY =40;
m_iDX = m_iDX*11.8;
m_iDY = m_iDY*11.8;
m_iDText ="XXX:X";
TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());
m_iDX =6;
m_iDY =46;
m_iDX = m_iDX*11.8;
m_iDY = m_iDY*11.8;
m_iDText ="";
T
SelectObject(hdcprint,font2);
m_iDY =15;
m_iDX =45;
m_iDX = m_iDX*11.8;
m_iDY = m_iDY*11.8;
m_iDText ="民 政 卡";
TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());//
RestoreDC(hdcprint,-1); //恢复打印机设备句柄
EndPage(hdcprint); //打印机停纸,停止打印
EndDoc(hdcprint); //结束一个打印作业
//MessageBox("打印完毕!","提示",MB_ICONINFORMATION);
}
DeleteDC(hdcprint);
}
else
{
MessageBox("找不到打印机,请确定是否有副本");
return ;
}
}