请高手帮看看,为什么我打印的时候,打印机已经启动了,但打印的内容是空白的。以下是我的打印程序。void CprintTestDlg::Print(CDC *pDC)
{
CDC printDC;
CPrintDialog printDlg(FALSE);
DOCINFO docInfo; if(printDlg.DoModal()==IDOK)
{
HDC hDC;
hDC=printDlg.GetPrinterDC();
if(!printDC.Attach(hDC))
return;
}
else
{
printDC.Detach();
return;
}
memset(&docInfo,0,sizeof(docInfo));
docInfo.cbSize=sizeof(DOCINFO);
docInfo.lpszDocName=_T("Print Window");
if(printDC.StartDoc(&docInfo)<=0)
{
#ifdef _DEBUG
AfxMessageBox(_T("Start Doc Failed"));
#endif
printDC.Detach();
return;
}
printDC.StartPage();
printDC.SetMapMode(MM_TEXT);
printDC.StretchBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); printDC.EndPage();
printDC.EndDoc(); printDC.Detach();}void CprintTestDlg::drawwave(CDC *pDC)
{
CString string;
HANDLE hFont=CreateFont(50, 50, 0, 0, 0, TRUE, 0, 0, 0, 0, 0, 0, 0, (LPCTSTR)"宋体");//Times New Roman
pDC->SelectObject(hFont);
pDC->SetBkMode(TRANSPARENT);
pDC->Rectangle(&rect);
pDC->ExtTextOut(100,100, 0, 0, _T("我们都是中国人"), NULL);
}void CprintTestDlg::OnBnClickedprint()
{
pWnd = GetDlgItem(IDC_COORD); // 获得对话框上的picture的窗口句柄
pWnd->GetClientRect(&rect); // 获取绘制坐标的文本框
pDC = pWnd->GetDC(); // 获得对话框上的picture的设备指针
pOldBmp = NULL; // 将旧的位图指针置空
// 创建内存绘图设备,使内存位图的DC与控件的DC关联
memDC.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
pOldBmp = memDC.SelectObject(&memBitmap);
drawwave(&memDC);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
Print(&memDC);// TODO: 在此添加控件通知处理程序代码
}
{
CDC printDC;
CPrintDialog printDlg(FALSE);
DOCINFO docInfo; if(printDlg.DoModal()==IDOK)
{
HDC hDC;
hDC=printDlg.GetPrinterDC();
if(!printDC.Attach(hDC))
return;
}
else
{
printDC.Detach();
return;
}
memset(&docInfo,0,sizeof(docInfo));
docInfo.cbSize=sizeof(DOCINFO);
docInfo.lpszDocName=_T("Print Window");
if(printDC.StartDoc(&docInfo)<=0)
{
#ifdef _DEBUG
AfxMessageBox(_T("Start Doc Failed"));
#endif
printDC.Detach();
return;
}
printDC.StartPage();
printDC.SetMapMode(MM_TEXT);
printDC.StretchBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); printDC.EndPage();
printDC.EndDoc(); printDC.Detach();}void CprintTestDlg::drawwave(CDC *pDC)
{
CString string;
HANDLE hFont=CreateFont(50, 50, 0, 0, 0, TRUE, 0, 0, 0, 0, 0, 0, 0, (LPCTSTR)"宋体");//Times New Roman
pDC->SelectObject(hFont);
pDC->SetBkMode(TRANSPARENT);
pDC->Rectangle(&rect);
pDC->ExtTextOut(100,100, 0, 0, _T("我们都是中国人"), NULL);
}void CprintTestDlg::OnBnClickedprint()
{
pWnd = GetDlgItem(IDC_COORD); // 获得对话框上的picture的窗口句柄
pWnd->GetClientRect(&rect); // 获取绘制坐标的文本框
pDC = pWnd->GetDC(); // 获得对话框上的picture的设备指针
pOldBmp = NULL; // 将旧的位图指针置空
// 创建内存绘图设备,使内存位图的DC与控件的DC关联
memDC.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
pOldBmp = memDC.SelectObject(&memBitmap);
drawwave(&memDC);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
Print(&memDC);// TODO: 在此添加控件通知处理程序代码
}
解决方案 »
- DLL中用ZeroMemory填充结构体出现Access Violation!
- 有谁知道如何用GPRS MODEM发送 WEB PUSH 的一个彩信链接
- 熟悉MSMQ编程的高手请进××××××××××××××××××××××××
- 在VB中调用VC开发的API出现的问题
- 关于listctrl的一个简单问题
- 请问在VC中有几种方法调用COM组件?
- 如何将CString转换成char*???
- msdn上的一段示例代码,为什么运行结果和msdn不一样?
- 紧急求教c语言下汉字的问题
- 如何实现数据库中的自增???????????????????
- ACtivex控件暴露属性与方法,不明白错在那了。请大家江湖救急!!
- 逻辑表达式逻辑实现的设计
如果打印的话,你这个兼容DC是不是是不是应该用打印DC,而不是Picture控件的DC啊。
return;
}
else
{
printDC.Detach();
return;
} 既然Attach没成功,为什么还Detach?printDC.StretchBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); 一样的宽高,为啥用StretchBlt?还有,没有操作打印机的几个函数返回值进行判断,代码质量太差了
if(hdcPrint != NULL)
{
CDC MemDc;
MemDc.Attach(hdcPrint);
if(pDrawInfo!= NULL)
{
//应该用这个DC
}
}个人看法,不知道对不