📄 linecount.cpp
字号:
// 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 + -