关于用CDC打印的问题,大家快帮忙

qb_zhm 2000-06-07 10:09:00
不知为何,我用CDC类打印设置的字体无效。代码如下:

CDC printhkd;
CPrintDialog printDlg(FALSE);
if (printDlg.DoModal() == IDCANCEL)
return;
printhkd.Attach(printDlg.GetPrinterDC());
printhkd.m_bPrinting = TRUE;
CString jh;
DOCINFO docinfo;
static char szMsg[]="文档名";
docinfo.cbSize=strlen(szMsg);
docinfo.lpszDocName=szMsg;
docinfo.lpszOutput=NULL;
zt=printhkd.GetCurrentFont();
zt->GetLogFont(&curLogFont);

//执行到此时curLogFont.lfHeight,lfWidth,lfWeight都为0,不知为何。

curLogFont.lfWidth=100;
curLogFont.lfHeight=100;

//上两行为设置新的字体大小,可是不论宽度和高度定为多少,打印出来的
//字体都没变,不知是哪儿的问题。

newfont.CreateFontIndirect(&curLogFont);
printhkd.SelectObject(&newfont);

printhkd.StartDoc(&docinfo);
printhkd.StartPage();
i=TextOut(printhkd.m_hDC,10,10,"zhm",3);
printhkd.EndPage();
printhkd.EndDoc();
DeleteDC(hPrinthkd);
另外,因为我没有在程序创建是选中打印,只在程序的对话框中需要打印,这样的话我如何定义纸张大小,CDC类中好象没有定义纸张大小的方法。请各位大虾帮忙。
...全文
280 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qb_zhm 2000-06-08
  • 打赏
  • 举报
回复
还是不行啊,我都用上字体对话框了,可定义出来的字体无效,真烦,谁能告诉我究竟为什么?我在别的论坛也见到有人问这问题,可是也没人回答,这到底是怎么回事?
CDC printhkd;
CPrintDialog printDlg(FALSE);
if (printDlg.DoModal() == IDCANCEL)
return;
printhkd.Attach(printDlg.GetPrinterDC());
printhkd.m_bPrinting = TRUE;
CString jh;
DOCINFO docinfo;
static char szMsg[]="文档名";
docinfo.cbSize=strlen(szMsg);
docinfo.lpszDocName=szMsg;
docinfo.lpszOutput=NULL;

CFontDialog curLogFont;
printhkd.SelectObject(&curLogFont);

//程序执行到此,curLogFont中的字体信息正确,可是以下的打印语名打出来的却不是定义的字体,怎么回事。

printhkd.StartDoc(&docinfo);
printhkd.StartPage();
i=TextOut(printhkd.m_hDC,10,10,"zhm",3);
printhkd.EndPage();
printhkd.EndDoc();
DeleteDC(hPrinthkd);
qb_zhm 2000-06-08
  • 打赏
  • 举报
回复
我终于找到原因了。
用下面这段程序,终于找到了原因,看我的这段程序:
1 CFont* zt,newfont;
2 LOGFONT curLogFont;
3 CFontDialog fontDlg;
4 LOGFONT font;
5 CFont printFont;
6 fontDlg.DoModal();
7 fontDlg.GetCurrentFont(&font);
8 printFont.CreateFont(font.lfHeight,
font.lfWidth,
font.lfEscapement,
font.lfOrientation,
font.lfWeight,
font.lfItalic,
font.lfUnderline,
font.lfStrikeOut,
font.lfCharSet,
font.lfOutPrecision,
font.lfClipPrecision,
font.lfQuality,
font.lfPitchAndFamily,
font.lfFaceName);
9 pDC->SelectObject(&printFont);
10 DOCINFO docinfo;
11 static char szMsg[]="文档名";
12 docinfo.cbSize=strlen(szMsg);
13 docinfo.lpszDocName=szMsg;
14 docinfo.lpszOutput=NULL;
15 pDC->StartDoc(&docinfo);
16 pDC->StartPage();
17 pDC->TextOut(10,10,"zhm");
18 pDC->SelectObject(&printFont);
19 pDC->TextOut(10,10,"zhm");
20 pDC->EndPage();
21 pDC->EndDoc();
// DeleteDC(hDC);

第17和第19条同为打印语句,但17条定义的字体无效,第19条定义的字体是有效的,经过我测试,在执行了第15,16条语句之后,定义的字体就被还原了。个中的原因我也懒得去追究,好累。另外谢谢你了
softdoctor 2000-06-08
  • 打赏
  • 举报
回复
单纯修改字高与字宽是没用的,字体是无法任意定义的
一般来说,字高是可定义的,但是这个值却有正负之分,
有的字体字高只能设为负的,如果这时你设一个正值,它就会
使用默认的字体大小来输出。
关于TrueType字体,比如"宋体",就是TrueType字体,它基本
上可以按比例缩放。"MS Serif"就不是TrueType字体。
另外如果是中文,一定要注意将字符集设成GB2312_CHARSET。

你可以使用CreateFont创建字体。

if(curLogFont.lfHeight>0)
curLogFont.lfHeight = 100;
else
curLogFont.lfHeight = -100;
qb_zhm 2000-06-07
  • 打赏
  • 举报
回复
非常感谢,但是我如何选用一种TrueType字体呢?
softdoctor 2000-06-07
  • 打赏
  • 举报
回复
字体问题:可能是你选择的字体不是TrueType 字体,请选用一种TrueType字体。
定义纸张大小是在CreateDC里作的,你这里CPrintDialog为你创建了打印DC,要想控制
纸张大小,必须修改CPrintDialog.m_pd.hDevMode,其中hDevMode是HGLOBAL类型
内存结构是DEVMODE,DEVMODE是一个结构DEVMODE.dmPaperSize指的是纸张大小索引,修改它即可修改纸张大小。DEVMODE.dmPaperLength; DEVMODE.dmPaperWidth; 指具体长宽(mm),当DEVMODE.dmPaperSize为0时有效,为自定义大小。具体可看帮助。
LPDEVMODE pDevMode = (LPDEVMODE)GlobalLock(CPrintDialog.m_pd.hDevMode)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧