关于打印、打印预览(来者有分!)

xujie839997 2004-03-31 09:18:17
基于文档视图的打印,请给个这方面的例子。包括分页、打印页眉页脚,设置字体及大小。现在我对坐标和映射方式还不明白,请高手指教啊。
...全文
84 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xujie839997 2004-04-01
  • 打赏
  • 举报
回复
逻辑坐标和设备坐标的转换问题?继续,怎么转换的
jimlei76 2004-04-01
  • 打赏
  • 举报
回复
我的打印程序也是写得很糟糕!不过还算能打出东西。自己很不满意,也希望提高啊
pcyy 2004-04-01
  • 打赏
  • 举报
回复



















NOMADBLUE 2004-04-01
  • 打赏
  • 举报
回复
还是《深入浅出MFC》吧
Mr-Chen 2004-04-01
  • 打赏
  • 举报
回复
主要是逻辑坐标和设备坐标的转换问题
远志999 2004-04-01
  • 打赏
  • 举报
回复
自由的风 2004-04-01
  • 打赏
  • 举报
回复
回复人: nuaawenlin(飘人) ( ) 说得很对
xujie839997 2004-04-01
  • 打赏
  • 举报
回复
继续继续啊
远志999 2004-04-01
  • 打赏
  • 举报
回复
看看深入浅出上面讲的吧,在到网上搜索一线资料,^_^

up
xujie839997 2004-04-01
  • 打赏
  • 举报
回复
给点例子吧,大侠!
showjancn 2004-04-01
  • 打赏
  • 举报
回复
基于文档视图的打印,MFC已做好了框架,你只需控制面面的大小进行纸张更换就行
jsphuang 2004-03-31
  • 打赏
  • 举报
回复
代码乱了一点,这个是WINDOWS程序设计上的。这个例子功能就是能打印EDIT框中的内容,
hwndEdit参数即为EDIT的句柄。
jsphuang 2004-03-31
  • 打赏
  • 举报
回复
一个用API完成的ROUTINE,思路简单。
BOOL PopPrntPrintFile (HINSTANCE hInst, HWND hwnd, HWND hwndEdit,
PTSTR szTitleName)
{
static DOCINFO di = { sizeof (DOCINFO) } ;
static PRINTDLG pd ;
BOOL bSuccess ;
int yChar, iCharsPerLine, iLinesPerPage, iTotalLines,
iTotalPages, iPage, iLine, iLineNum ;
PTSTR pstrBuffer ;
TCHAR szJobName [64 + MAX_PATH] ;
TEXTMETRIC tm ;

WORD iColCopy, iNoiColCopy ;

// Invoke Print common dialog box

pd.lStructSize = sizeof (PRINTDLG) ;

pd.hwndOwner = hwnd ;

pd.hDevMode = NULL ;

pd.hDevNames = NULL ;

pd.hDC = NULL ;

pd.Flags = PD_ALLPAGES | PD_COLLATE |

PD_RETURNDC | PD_NOSELECTION ;

pd.nFromPage = 0 ;

pd.nToPage = 0 ;

pd.nMinPage = 0 ;

pd.nMaxPage = 0 ;

pd.nCopies = 1 ;

pd.hInstance = NULL ;

pd.lCustData = 0L ;

pd.lpfnPrintHook = NULL ;

pd.lpfnSetupHook = NULL ;

pd.lpPrintTemplateName = NULL ;

pd.lpSetupTemplateName = NULL ;

pd.hPrintTemplate = NULL ;

pd.hSetupTemplate = NULL ;



if (!PrintDlg (&pd))

return TRUE ;



if (0 == (iTotalLines = SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0)))

return TRUE ;


// Calculate necessary metrics for file



GetTextMetrics (pd.hDC, &tm) ;

yChar = tm.tmHeight + tm.tmExternalLeading ;



iCharsPerLine = GetDeviceCaps (pd.hDC, HORZRES) / tm.tmAveCharWidth ;

iLinesPerPage = GetDeviceCaps (pd.hDC, VERTRES) / yChar ;

iTotalPages = (iTotalLines + iLinesPerPage - 1) / iLinesPerPage ;


// Allocate a buffer for each line of text



pstrBuffer = malloc (sizeof (TCHAR) * (iCharsPerLine + 1)) ;


// Display the printing dialog box



EnableWindow (hwnd, FALSE) ;

bSuccess = TRUE ;

bUserAbort = FALSE ;

SetDlgItemText (hDlgPrint, IDC_FILENAME, szTitleName) ;

// Start the document

GetWindowText (hwnd, szJobName, sizeof (szJobName)) ;

di.lpszDocName = szJobName ;

if (StartDoc (pd.hDC, &di) > 0)

{

// Collation requires this loop and iNoiColCopy

for (iColCopy = 0 ;

iColCopy < ((WORD) pd.Flags & PD_COLLATE ? pd.nCopies : 1) ;

iColCopy++)

{

for (iPage = 0 ; iPage < iTotalPages ; iPage++)

{

for (iNoiColCopy = 0 ;

iNoiColCopy < (pd.Flags & PD_COLLATE ? 1 : pd.nCopies);

iNoiColCopy++)

{

// Start the page

if (StartPage (pd.hDC) < 0)

{

bSuccess = FALSE ;

break ;

}


// For each page, print the lines

for (iLine = 0 ; iLine < iLinesPerPage ; iLine++)

{

iLineNum = iLinesPerPage * iPage + iLine ;

if (iLineNum > iTotalLines)

break ;

*(int *) pstrBuffer = iCharsPerLine ;

TextOut (pd.hDC, 0, yChar * iLine, pstrBuffer,

(int) SendMessage (hwndEdit, EM_GETLINE,

(WPARAM) iLineNum, (LPARAM) pstrBuffer));

}



if (EndPage (pd.hDC) < 0)

{

bSuccess = FALSE ;

break ;

}



if (bUserAbort)

break ;

}



if (!bSuccess || bUserAbort)

break ;

}



if (!bSuccess || bUserAbort)

break ;

}

}

else

bSuccess = FALSE ;

if (bSuccess)

EndDoc (pd.hDC) ;



if (!bUserAbort)

{

EnableWindow (hwnd, TRUE) ;

DestroyWindow (hDlgPrint) ;

}



free (pstrBuffer) ;

DeleteDC (pd.hDC) ;



return bSuccess && !bUserAbort ;

}
nuaawenlin 2004-03-31
  • 打赏
  • 举报
回复
呵呵

看看深入浅出MFC

里面讲的很详细
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2004-03-31 09:18
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……