关闭

DataGrid打印(一)

标签: datagridfloatclass
1072人阅读 评论(0) 收藏 举报

#pragma once

#include "Msflexgrid.h"
#include "ForestEnum.h"

///////////////////////////////////////////////////////////
//  PrintHelper
//  Implementation of the Class PrintHelper
//  Created on:      10-2-2006 20:42:11
//  Original author: huangxinzhang
///////////////////////////////////////////////////////////
class CPrintHelper
{
public:

 CPrintHelper(CDC * pDc, bool bHeader, bool bFooter);

 ~CPrintHelper();

 // 該打印設備的 DPI 値
 int dpi() { return _dpi; }

 // 根據DPI値,將毫米單位轉換成像素單位
 int mm2pixel(float mm) {
  return (int) (mm * dpi() / 25.4);
 }

 // 根據DPI値,將像素單位轉換成毫米單位
 float pixel2mm(int pixel) {
  return (float) 25.4 * pixel / dpi();
 }

 //可打印區域頁高(單位:像素)
 int GetPagePixelHeight() { return _pDc->GetDeviceCaps(VERTRES); }

 //可打印區域頁寬(單位:像素)
 int GetPagePixelWidth() { return _pDc->GetDeviceCaps(HORZRES); }

 // 紙高(單位:像素)
 int GetPaperHeight() { return _pDc->GetDeviceCaps(PHYSICALHEIGHT); }

 // 紙寬 (單位:像素)
 int GetPaperWidth() { return _pDc->GetDeviceCaps(PHYSICALWIDTH); }

 //頁眉高度(單位:像素)
 int GetHeaderHeight() { return _bHeader ? _headerHeight : 0; }

 //頁脚高度(單位:像素)
 int GetFooterHeight() { return _bFooter ? _footerHeight : 0; }

 //字體高度(單位:像素)
 int GetFontPixelHeight() { return _fontHeight; }

 //行高 = 字體高度 + 行間距(單位:像素)
 int GetLinePixelHeight()
 {
  return _fontHeight + _LineSpacing;
 }
    // 頁的默認左空白(單位:mm)
 int GetPaperLMargin()
 {
  return int((25.4 * (GetPaperWidth() - GetPagePixelWidth()) / dpi()/2));
 }
    //頁的默認上空白(單位:mm)
 int GetPaperTMargin()
 {
  return int((25.4 * (GetPaperHeight() - GetPagePixelHeight()) / dpi()/2));
 }

 // 一頁可打印多少行
 int LinesPerPage() {
  int pageHeight = GetPagePixelHeight() - _topMargin - _bottomMargin;

  pageHeight -= GetHeaderHeight();
  pageHeight -= GetFooterHeight();

  int lpp = (int) (pageHeight / GetLinePixelHeight());

  return lpp - 1;  // 表頭用掉一行,所以減一
 }

 // 打印頁眉
 void PrintHeader(CString title, CString sYear, CString sImage, CString eYear, CString eImage);

 // 打印頁脚
 void PrintFooter(int currentPage); // , int totalPage);

 //打印一行格子及其内容
 void PrintGridHeader();

 // 打印一頁
 int PrintPage(CMsflexgrid1 &grid, int line);

 // 畫一行格子(除第一個格子外,其他格子同樣大小)
 void PrintLineGrid(int top, int height = 1);

 // 打印一行數據
 bool PrintLineText(CMsflexgrid1 &grid, int row, int& linePosition);

 // 打印一條row數據需要多少行
 int GetPrintLineNumber(CMsflexgrid1 &grid, int rowPos);

private:
 CString CPrintHelper::GetSubString( const CString s, int iStartPos, int iLen ) const;

private:
 CDC * _pDc;
 CFont * _pFont;
 CPen * _pPen;

 bool _bHeader; // 是否打印頁頭
 bool _bFooter; // 是否打印頁脚

 int _dpi;     // DPI (英寸點數)
 int _headerHeight; // 頁眉高度(單位:像素)
 int _titleHeight;  // 標題高(單位:像素)
 int _footerHeight; // 頁脚高度(單位:像素)
 int _fontHeight;   // 字體高度(單位:像素)
 int _LineSpacing;  // 行間距(單位:像素)

 int _topMargin;    // 上留白(單位:像素)
 int _bottomMargin; // 下留白(單位:像素)
 int _leftMargin;   // 左留白(單位:像素)
 int _rightMargin;  // 右留白(單位:像素)

 int _gridWidth;    // 格子寬度(單位:像素)
 int _firstGridWidth; // 第一個格子寬度(單位:像素)
 int _gridNUmber;   // 行格子數
 int _gridMargin;   // 格子中的左右邊界(像素)
    float _ratio;       //與A3紙相對的比率

 // 字體平均寬度(單位:mm)
 float _CharWidth;
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32288次
    • 积分:528
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:5篇
    • 评论:4条
    最新评论