⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linecount.cpp

📁 IP电话计费管理系统本地版
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// LineCount.cpp : implementation file
//

#include "stdafx.h"
#include "IPCount.h"
#include "LineCount.h"
#include "SaleMang.h"
#include "IPCountDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLineCount dialog


CLineCount::CLineCount(CWnd* pParent /*=NULL*/)
	: CDialog(CLineCount::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLineCount)
	m_strShowLine = _T("");
	m_strShowStatic = _T("");
	m_strShowCount = _T("");
	//}}AFX_DATA_INIT
	nItemNum=0;

	nPrintGridCount=0;
	for (int k=0;k<10;k++)
		strLanWidth[k]="";
}


void CLineCount::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLineCount)
	DDX_Control(pDX, IDC_BUTTON_PRINT, m_ButtonPrint);
	DDX_Control(pDX, IDC_MSFLEXGRID_LINE_COUNT, m_LineGrid);
	DDX_Text(pDX, IDC_EDIT_LINE, m_strShowLine);
	DDX_Text(pDX, IDC_EDIT_CALL_STATICS, m_strShowStatic);
	DDX_Text(pDX, IDC_EDIT_CALL_COUNT, m_strShowCount);
	DDX_Control(pDX, IDC_MSFLEXGRID_HIDE, m_HideGrid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLineCount, CDialog)
	//{{AFX_MSG_MAP(CLineCount)
	ON_BN_CLICKED(IDC_BUTTON_PRINT, OnPrint)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClear)

	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLineCount message handlers

/*
void CLineCount::OnPrint() 
{
	// TODO: Add your control notification handler code here
    if(nItemNum<1)//没有记录
	{
		AfxMessageBox("没有要打印的选项!");
		return;
	}
	PRINTDLG pd;
	pd.lStructSize = sizeof(PRINTDLG);
	pd.Flags = PD_RETURNDC;
	pd.hDC = NULL;
	pd.hwndOwner = NULL;
	pd.hInstance = NULL;
	pd.nMaxPage = 1;
	pd.nMinPage = 1;
	pd.nFromPage = 1;
	pd.nToPage  = 1;
	pd.nCopies = 1;
	pd.hDevMode = NULL;
	pd.hDevNames = NULL;

	//显示打印对话框,由用户来设定纸张大小等。
	if(!PrintDlg(&pd)) return ; 

	int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);
	int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);

	int nXMargin = 1;
	int nYMargin = 1;
	TEXTMETRIC tm;
	GetTextMetrics(pd.hDC, &tm);
	int nCharHeight = tm.tmHeight*2+2;//加2
	int nCharWidth = tm.tmAveCharWidth;
	int nColCount=7;//列数
	int nLineCount=8;//行数

	DOCINFO di;
	di.cbSize = sizeof(DOCINFO);
	di.lpszDocName = "打印话单"; 
	di.lpszOutput = (LPTSTR) NULL; 
	di.lpszDatatype = (LPTSTR) NULL; 
	di.fwType = 0; 
	StartDoc(pd.hDC, &di);
	StartPage(pd.hDC);

	int nMaxLinePerPage = nVerRes/nCharHeight -3;

	int nCurPage =1;

	COLATT ca[100];

	for(int i =0 ; i< nColCount+1; i++)//针式打印代码
	{
		if(i>0)
		    ca[i].nPrintX=ca[i-1].nPrintX+atoi(strLanWidth[i]);
		else
            ca[i].nPrintX=atoi(strLanWidth[i]);

	}
   
	
	int nPrintItem=1;//打印第一页
	//输出各列的数据
    while(nPrintItem<nItemNum+1)
	{
	   for(i =0; i<nLineCount; i++)//0-1
	   {
		  for(int j =0; j<nColCount; j++)
		  {
			
			CString subitem = m_HideGrid.GetTextMatrix(i, j);
			
			TextOut(pd.hDC, ca[j].nPrintX, 
					nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
					subitem, strlen(subitem));

		  }
	   }
	   if(nPrintItem<nItemNum)//打印多项
	   {
		   nPrintItem++;
	       PreparePrint(nPrintItem);
		   EndPage(pd.hDC);
		   StartPage(pd.hDC);
	   }
	   else
           break;
	}

	EndPage(pd.hDC);
	EndDoc(pd.hDC);

    //打印结束
	DeleteDC(pd.hDC);
    OnClear();
   
}
*/

void CLineCount::OnPrint() 
{
	// TODO: Add your control notification handler code here

    CIPCountDlg *IPCdlg;
	IPCdlg=(CIPCountDlg *)GetParent()->GetParent();
    if(nItemNum<1)//没有记录
	{
		AfxMessageBox("没有要打印的选项!");
		return;
	}

	//不显示打印对话框。
	CPrintDialog dlg(FALSE);
    dlg.GetDefaults();

    // is a default printer set up?
   HDC hdcPrinter = dlg.GetPrinterDC();
   if (hdcPrinter == NULL)
   {
       MessageBox(_T("Buy a printer!"));
   }
   else
   {
   // create a CDC and attach it to the default printer
   CDC dcPrinter;
   dcPrinter.Attach(hdcPrinter);


	int nHorRes = dcPrinter.GetDeviceCaps( HORZRES);
	int nVerRes = dcPrinter.GetDeviceCaps( VERTRES);

	int nXMargin = 1;
	int nYMargin = atoi(IPCdlg->strUpSpace);
	TEXTMETRIC tm;
	dcPrinter.GetTextMetrics(&tm);
	int nCharHeight = tm.tmHeight*2;//加2
	int nCharWidth = tm.tmAveCharWidth;
	int nColCount=7;//列数
	int nLineCount=9;//行数

	DOCINFO di;
	di.cbSize = sizeof(DOCINFO);
	di.lpszDocName = "打印话单"; 
	di.lpszOutput = (LPTSTR) NULL; 
	di.lpszDatatype = (LPTSTR) NULL; 
	di.fwType = 0; 
	

    dcPrinter.StartDoc(&di);
	dcPrinter.StartPage();
	int nMaxLinePerPage = nVerRes/nCharHeight;

	int nCurPage =1;

	COLATT ca[100];

	for(int i =0 ; i< nColCount+1; i++)//针式打印代码
	{
		if(i>0)
		    ca[i].nPrintX=ca[i-1].nPrintX+atoi(strLanWidth[i]);
		else
            ca[i].nPrintX=atoi(strLanWidth[i]);

	}
   
	
	int nPrintItem=1;//打印第一页
	
	CGdiObject* pOldFont = dcPrinter.SelectStockObject(ANSI_VAR_FONT);//字体
	//输出各列的数据
    while(nPrintItem<nItemNum+1)
	{
	   for(i =0; i<nLineCount; i++)//0-1
	   {
		  for(int j =0; j<nColCount; j++)
		  {
			
			CString subitem = m_HideGrid.GetTextMatrix(i, j);
			
			dcPrinter.TextOut(ca[j].nPrintX, 
					nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
					subitem, strlen(subitem));
		  }
	   }
	   if(nPrintItem<nItemNum)//打印多项
	   {
		   nPrintItem++;
	       PreparePrint(nPrintItem);
	   }
	   else
           break;
	}


	dcPrinter.EndPage();
	dcPrinter.EndDoc();
	dcPrinter.SelectObject(pOldFont);//字体

    //打印结束
    OnClear();
   }
}


BOOL CLineCount::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_LineGrid.SetTextArray(0,"流水号");
	m_LineGrid.SetColWidth(0,1400);
	m_LineGrid.SetTextArray(1,"序号");
	m_LineGrid.SetColWidth(1,700);
	m_LineGrid.SetTextArray(2,"被叫号码");
	m_LineGrid.SetColWidth(2,1520);
	m_LineGrid.SetTextArray(3,"起始时间");
	m_LineGrid.SetColWidth(3,2380);
	m_LineGrid.SetTextArray(4,"时长");
	m_LineGrid.SetTextArray(5,"费率");
	m_LineGrid.SetTextArray(6,"附加费");
	m_LineGrid.SetTextArray(7,"话费");
	m_LineGrid.SetTextArray(8,"押金");
	m_LineGrid.SetTextArray(9,"找零");
	m_LineGrid.SetTextArray(10,"区名");
	m_LineGrid.SetColWidth(9,840);
	CSaleMang *mdlg;
	mdlg=(CSaleMang *)GetParent();
	mdlg->nGridCount=0;
	CString strLineCountFlag="";
	int nCountNum=0;
    nCountNum=mdlg->nLineCountFlag;//线号
	strLineCountFlag.Format("%d",nCountNum);
	if((nCountNum==16)||(nCountNum==18))//全部结算
	{
		m_strShowLine="全部";
        m_ButtonPrint.EnableWindow(FALSE);
	}
	else
	{
		m_ButtonPrint.EnableWindow(TRUE);
		m_strShowLine=strLineCountFlag;
  	}

	mdlg->GetFromTemp(strLineCountFlag);
    UpdateData(FALSE);
    nItemNum=atoi(m_strShowCount);
    if(nItemNum>0)
	{
		ReadFromFile();
		PreparePrint(1); 
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CLineCount::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

//重置该线路为初始状态,同时清除Temp表中该线的记录
void CLineCount::OnClear() 
{
	UpdateData(TRUE);
	CSaleMang *mdlg;
	mdlg=(CSaleMang *)GetParent();
	CTempRecordSet m_TSet(&m_database);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -