谁能给我一个对话框中图形打印的例子?多谢! 如提 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你看看这个例子:http://www.codeproject.com/printing/PrintExtension.asp?target=dialog%7Cprint 响应你的按键,写上这段代码void MyWnd::PrintBaseInfo(){ CWinApp *pApp = ::AfxGetApp(); CPrintInfo printInfo; CDC dcPrint; //打印确认对话框 if(pApp->DoPrintDialog(printInfo.m_pPD) != IDOK) return; ASSERT(printInfo.m_pPD != NULL); ASSERT(printInfo.m_pPD->m_pd.hDC != NULL); //当前预览页数 printInfo.m_nNumPreviewPages = pApp->m_nNumPreviewPages; //页码显示方式采用预览方式 VERIFY(printInfo.m_strPageDesc.LoadString(AFX_IDS_PREVIEWPAGEDESC)); DOCINFO docInfo;//打印任务信息 memset(&docInfo, 0, sizeof(DOCINFO)); docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = "MyAPP";//打印任务标题 //attach printer dc dcPrint.Attach(printInfo.m_pPD->m_pd.hDC); dcPrint.m_bPrinting = TRUE; //准备开始打印 OnBeginPrinting(&dcPrint, &printInfo); // disable main window AfxGetMainWnd()->EnableWindow(false); if(!printInfo.m_bDocObject && dcPrint.StartDoc(&docInfo) == SP_ERROR) { //初始化失败退出打印 AfxGetMainWnd()->EnableWindow(TRUE); OnEndPrinting(&dcPrint, &printInfo); dcPrint.Detach(); AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); return; } //用户数据用以保存当前打印位置(当前已打印到多少行) printInfo.m_lpUserData = new int; memset(printInfo.m_lpUserData, 0, 4); BOOL bError = FALSE; if (printInfo.m_bDocObject == NULL) { for (printInfo.m_nCurPage = 0; printInfo.m_bContinuePrinting; printInfo.m_nCurPage++) { // set up drawing rect to entire page (in logical coordinates) printInfo.m_rectDraw.SetRect(0, 0, dcPrint.GetDeviceCaps(HORZRES), dcPrint.GetDeviceCaps(VERTRES)); dcPrint.DPtoLP(&printInfo.m_rectDraw); // attempt to start the current page if (dcPrint.StartPage() < 0) { bError = TRUE; break; } //向打印机DC输出内容 ASSERT(printInfo.m_bContinuePrinting); OnPrint(&dcPrint, &printInfo); if (dcPrint.EndPage() < 0) { bError = TRUE; break; } } } // cleanup document printing process if (!printInfo.m_bDocObject) { if (!bError) dcPrint.EndDoc(); else dcPrint.AbortDoc(); } AfxGetMainWnd()->EnableWindow(true); // enable main window dcPrint.Detach(); if(printInfo.m_lpUserData != NULL) { delete printInfo.m_lpUserData; printInfo.m_lpUserData = NULL; }}//自己再根据需要定制下面的函数void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);void OnPrint(CDC* pDC, CPrintInfo* pInfo);void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);我想应该可以满足你的打印需求 高分:精确计算字符高度 介绍一部C++经典教材 能获得离屏表面的得出吗 求助:如何通过计算机对Modem进行拨号,发送数据 IHTMLInputElement为什么说没有定义呢? 在VC中编译ZThread库,怎样配置? TextOut文字输出问题 能帮我看一下,串口发送数据后,为什么没有反应? 线程间通信的问题 各位大哥,请问没有CRichDoc支持,能不能调用CRichEdit? 感觉老是用SDI,MDI。界面太单调。想另外设计一个框架,但是也不知道从何下手!请高人这点一二 关于sdi中对话框的使用(江湖救急呀,各位大侠)
http://www.codeproject.com/printing/PrintExtension.asp?target=dialog%7Cprint
void MyWnd::PrintBaseInfo()
{
CWinApp *pApp = ::AfxGetApp();
CPrintInfo printInfo;
CDC dcPrint; //打印确认对话框
if(pApp->DoPrintDialog(printInfo.m_pPD) != IDOK)
return; ASSERT(printInfo.m_pPD != NULL);
ASSERT(printInfo.m_pPD->m_pd.hDC != NULL); //当前预览页数
printInfo.m_nNumPreviewPages = pApp->m_nNumPreviewPages;
//页码显示方式采用预览方式
VERIFY(printInfo.m_strPageDesc.LoadString(AFX_IDS_PREVIEWPAGEDESC)); DOCINFO docInfo;//打印任务信息
memset(&docInfo, 0, sizeof(DOCINFO));
docInfo.cbSize = sizeof(DOCINFO);
docInfo.lpszDocName = "MyAPP";//打印任务标题 //attach printer dc
dcPrint.Attach(printInfo.m_pPD->m_pd.hDC);
dcPrint.m_bPrinting = TRUE; //准备开始打印
OnBeginPrinting(&dcPrint, &printInfo); // disable main window
AfxGetMainWnd()->EnableWindow(false); if(!printInfo.m_bDocObject && dcPrint.StartDoc(&docInfo) == SP_ERROR)
{
//初始化失败退出打印
AfxGetMainWnd()->EnableWindow(TRUE);
OnEndPrinting(&dcPrint, &printInfo);
dcPrint.Detach();
AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT);
return;
} //用户数据用以保存当前打印位置(当前已打印到多少行)
printInfo.m_lpUserData = new int;
memset(printInfo.m_lpUserData, 0, 4); BOOL bError = FALSE;
if (printInfo.m_bDocObject == NULL)
{
for (printInfo.m_nCurPage = 0;
printInfo.m_bContinuePrinting;
printInfo.m_nCurPage++)
{
// set up drawing rect to entire page (in logical coordinates)
printInfo.m_rectDraw.SetRect(0, 0,
dcPrint.GetDeviceCaps(HORZRES),
dcPrint.GetDeviceCaps(VERTRES));
dcPrint.DPtoLP(&printInfo.m_rectDraw);
// attempt to start the current page
if (dcPrint.StartPage() < 0)
{
bError = TRUE;
break;
}
//向打印机DC输出内容
ASSERT(printInfo.m_bContinuePrinting);
OnPrint(&dcPrint, &printInfo); if (dcPrint.EndPage() < 0)
{
bError = TRUE;
break;
}
}
}
// cleanup document printing process
if (!printInfo.m_bDocObject)
{
if (!bError)
dcPrint.EndDoc();
else
dcPrint.AbortDoc();
}
AfxGetMainWnd()->EnableWindow(true); // enable main window
dcPrint.Detach(); if(printInfo.m_lpUserData != NULL)
{
delete printInfo.m_lpUserData;
printInfo.m_lpUserData = NULL;
}
}//自己再根据需要定制下面的函数
void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
void OnPrint(CDC* pDC, CPrintInfo* pInfo);
void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
我想应该可以满足你的打印需求