设置打印页面
使用“页码设置”对话框可以进行设置纸张、页边距和打印方向等操作。可以通过CPageSetupDialog类的构造函数来构造“页码设置”对话框。
语法:
CPageSetupDialog( DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE, CWnd* pParentWnd = NULL );
参数说明:
dwFlags:定制对话框的标志。
pParentWnd:指向对话框父窗口的指针。
在设置“页码设置”对话框以后,可以调用GetMargins获得打印机当前的页边距设置。
语法
void GetMargins( LPRECT lpRectMargins, LPRECT lpRectMinMargins ) const;
参数说明:
lpRectMargins:当前打印机的打印边距。
lpRectMinMargins:当前打印机的最小打印边距。
例如,使用“打印设置”对话框设置打印方向,程序设计步骤如下:
(1)创建一个基于文档/视图结构的应用程序。
(2)打开菜单资源编辑器,在菜单资源中添加一个“页面设置”菜单项,如图1所示。
图1 菜单资源
(3)在视图类的头文件中声明变量,代码如下。
int m_LeftMargin,m_TopMargin; //左边距和上边距
int screenx,screeny; //屏幕每英寸像素数
int printx,printy; //打印机每英寸像素数
double ratex,ratey; //打印机与屏幕的像素比率
CFont m_Font; //文本字体
(4)通过类向导为“页面设置”菜单项处理单击事件,在该事件的处理函数中调用“页面设置”对话框,代码如下。
void CSetPageView::OnMenupageset() //“页面设置”菜单项单击事件处理函数
{
CPageSetupDialog dlg; //构造“页面设置”对话框
if (dlg.DoModal()==IDOK) //显示页面设置对话框
{
CRect rect,minrect; //声明区域对象
dlg.GetMargins(rect,minrect);
m_LeftMargin = rect.left/100; //计算左边距单位是毫米
m_TopMargin = rect.top/100; //计算上边距单位是毫米
}
}
注意:GetMargins方法获取的页面大小单位是0.01毫米。
(5)重载OnBeginPrinting函数,在该函数中获得打印机每英寸像素数,并技术打印机与屏幕的像素比率,代码如下。
void CSetPageView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)
{
//获取打印机每英寸像素数
printx =pDC->GetDeviceCaps(LOGPIXELSX);
printy =pDC->GetDeviceCaps(LOGPIXELSY);
//计算打印机与屏幕的比率
ratex = (double)printx /screenx;
ratey = (double)printy /screeny;
}
(6)重载OnDraw函数,在应用程序窗口中绘制打印文本,打印时在指定页面位置绘制文本,代码如下。
void CSetPageView::OnDraw(CDC* pDC)
{
CSetPageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//获取屏幕每英寸像素数
screenx =pDC->GetDeviceCaps(LOGPIXELSX);
screeny =pDC->GetDeviceCaps(LOGPIXELSY);
CString str; //声明字符串
str = "会当凌绝顶,一览众山小"; //设置字符串
if(pDC->IsPrinting()) //判断是否打印
{
int leftmargin = int((m_LeftMargin / 25.4) * printx); //将毫米转换为像素
int topmargin = int((m_TopMargin / 25.4) * printx); //将毫米转换为像素
m_Font.CreatePointFont(int(150*ratex),"宋体"); //创建字体
pDC->SelectObject(&m_Font); //将字体选入设备上下文
pDC->TextOut(int(50 * ratex + leftmargin),
int(50 * ratey + topmargin),str); //绘制文本
}
else //不打印时
{
m_Font.CreatePointFont(150,"宋体"); //创建字体
pDC->SelectObject(&m_Font); //将字体选入设备上下文
pDC->TextOut(50,50,str); //绘制文本
}
m_Font.DeleteObject(); //释放字体
}
程序运行效果如图2所示。
.jpg)
图2 默认设置时预览
选择“页面设置”对话框设置页边距,程序运行效果如图3所示。

图3 设置页面边距