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

📄 reptabdlg.cpp

📁 变压器监控程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RepTabDlg.cpp : implementation file
//

#include "stdafx.h"
#include "trans.h"
#include "RepTabDlg.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRepTabDlg dialog

static UINT indicators[] =
{
	ID_SEPARATOR,
	ID_SEPARATOR,
	ID_SEPARATOR,
};
CRepTabDlg::CRepTabDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRepTabDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRepTabDlg)
	//}}AFX_DATA_INIT
	m_bCreated=false;
	nPageWidth=687;
	nPageHeight=971;
	nPageInTop=40;
	nPageInLeft=40;
	nLeftMargin=40;
	nTopMargin=20;
	nGap=20;

	nRowHeight=20;
//	nPageCount=1;
//	nRowCount=3;
//	nColCount=5;

	defdeviceset=NULL;
}
CRepTabDlg::~CRepTabDlg()
{
	arrTxt.RemoveAll();
	arrPageEndIndex.RemoveAll();
}

void CRepTabDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRepTabDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRepTabDlg, CDialog)
	//{{AFX_MSG_MAP(CRepTabDlg)
	ON_COMMAND(ID_SETPAGE, OnSetpage)
	ON_COMMAND(ID_REPEXIT, OnRepexit)
	ON_COMMAND(ID_PRINT, OnPrint)
	ON_COMMAND(ID_PRE, OnPre)
	ON_COMMAND(ID_NEXT, OnNext)
	ON_COMMAND(ID_LAST, OnLast)
	ON_COMMAND(ID_FIRST, OnFirst)
	ON_WM_HSCROLL()
	ON_WM_MOUSEWHEEL()
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_TIMER()
	ON_WM_VSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRepTabDlg message handlers

void CRepTabDlg::OnSetpage() 
{
	// TODO: Add your command handler code here
	CPageSetupDialog dlg(PSD_MARGINS);
	if(defdeviceset!=NULL)
		dlg.m_psd.hDevMode=defdeviceset;
	else
	{
		PRINTDLG pd;
		ZeroMemory(&pd, sizeof(PRINTDLG));
		AfxGetApp()->GetPrinterDeviceDefaults(&pd);

		DEVMODE* pDV = (LPDEVMODE) ::GlobalLock(pd.hDevMode);
		pDV->dmPaperSize=DMPAPER_B5;
		GlobalUnlock(pd.hDevMode);
		dlg.m_psd.hDevMode=pDV;
	}

	if(dlg.DoModal()==IDOK)
	{
		CSize size = dlg.GetPaperSize();
		nPageWidth=size.cx*37.7928949357521/1000;
		nPageHeight=size.cy*37.7928949357521/1000;

		CalPageCount();
		SetLeftMargin();
		SetHVScrollRange();
		CalBeginAndEndIndex();
		UpDatePage();

		defdeviceset=dlg.GetDevMode();
	}
	
}

void CRepTabDlg::OnRepexit() 
{
	// TODO: Add your command handler code here
	CWnd* pWnd=AfxGetApp()->GetMainWnd()->GetDesktopWindow()->GetActiveWindow();
	pWnd->PostMessage(WM_CLOSE);
	
}

void CRepTabDlg::OnPrint() 
{
		// TODO: Add your command handler code here
	CPrintDialog dlg(FALSE, PD_SELECTION | PD_USEDEVMODECOPIES);
	if(defdeviceset!=NULL)
		dlg.m_pd.hDevMode=defdeviceset;
	else
	{
		PRINTDLG pd;
		ZeroMemory(&pd, sizeof(PRINTDLG));
		AfxGetApp()->GetPrinterDeviceDefaults(&pd);

		DEVMODE* pDV = (LPDEVMODE) ::GlobalLock(pd.hDevMode);
		pDV->dmPaperSize=DMPAPER_B5;
		GlobalUnlock(pd.hDevMode);
		dlg.m_pd.hDevMode=pDV;
	}
	dlg.m_pd.nCopies=1;
	dlg.m_pd.nMaxPage=nPageCount;
	dlg.m_pd.nMinPage=1;
	dlg.m_pd.nFromPage=1;
	dlg.m_pd.nToPage=nPageCount;
	if(dlg.DoModal()==IDOK)
	{
		int nBeginPage,nEndPage;
		if (dlg.PrintAll())              // print all pages in the document
		{
			nBeginPage = dlg.m_pd.nMinPage;
			nEndPage = dlg.m_pd.nMaxPage;
		}
		else if (dlg.PrintRange())       // print only a range of pages 
		{                                // in the document 
			nBeginPage = dlg.GetFromPage();
			nEndPage = dlg.GetToPage();
		}
		else if (dlg.PrintSelection())   // print only the currently selected 
		{
			nBeginPage = nEndPage = 1;     // -1 to denote unknown yet
		}


		HDC hdc = dlg.GetPrinterDC();
		CDC* pDC=new CDC();
		pDC->Attach(hdc);

		PreParePrinter(pDC);
		PrintTabPage(pDC,nBeginPage,nEndPage);
		
		pDC->Detach();

		delete pDC;
	}
	
}

//移到第一页
void CRepTabDlg::OnFirst() 
{
	// TODO: Add your command handler code here
	CRect rect;
	GetClientRect(rect);
	int nMin,nMax;
	pVScrollbar.GetScrollRange(&nMin,&nMax);
	pVScrollbar.SetScrollPos(nMax-nPageHeight-2*nTopMargin-27+rect.Height());
	UpDatePage();
}

void CRepTabDlg::OnLast() 
{
	// TODO: Add your command handler code here
	CRect rect;
	GetClientRect(rect);
	int nMin,nMax;
	pVScrollbar.GetScrollRange(&nMin,&nMax);
	pVScrollbar.SetScrollPos(nMax-nPageHeight-2*nTopMargin-27+rect.Height());
	UpDatePage();
}

void CRepTabDlg::OnNext() 
{
	// TODO: Add your command handler code here
	if(nNowPagePos>=nPageCount) return;
	CRect rect;
	GetClientRect(rect);
	pVScrollbar.SetScrollPos(nNowPagePos*(nPageHeight+nGap)+27+nTopMargin);
	nNowPagePos++;
	UpDatePage();
}
//上一页
void CRepTabDlg::OnPre() 
{
	// TODO: Add your command handler code here
	CRect rect;
	GetClientRect(rect);
	nNowPagePos--;
	pVScrollbar.SetScrollPos(nNowPagePos*(nPageHeight+nGap)+27+nTopMargin-(nPageHeight+nGap));
	UpDatePage();
}


void CRepTabDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if(pScrollBar==&pHScrollbar)
	{
		switch(nSBCode)
		{
		case SB_THUMBPOSITION:
			pHScrollbar.SetScrollPos(nPos);
		    break;
		case SB_LINEUP:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()-40);
			break;
		case SB_LINEDOWN:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()+40);
			break;
		case SB_LEFT:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()-10);
			break;
		case SB_RIGHT:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()+10);
			break;
		case SB_PAGERIGHT:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()+20);
			break;
		case SB_PAGELEFT:
			pHScrollbar.SetScrollPos(pHScrollbar.GetScrollPos()-20);
			break;
		}
		UpDatePage();
	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

BOOL CRepTabDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
	| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
	!m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
	{
		TRACE0("Failed to create toolbar\n");
		return false;      // fail to create
	}
	m_wndToolBar.MoveWindow(0,0,410,27,TRUE);
	m_wndToolBar.ShowWindow(SW_SHOW);

	pHScrollbar.Create(SBS_HORZ | SBS_BOTTOMALIGN | WS_CHILD, CRect(5, 5, 100, 30), this, 100);
    pHScrollbar.ShowScrollBar();

	pVScrollbar.Create(SBS_VERT | SBS_RIGHTALIGN | WS_CHILD, CRect(100, 0, 120, 100), this, 200);
    pVScrollbar.ShowScrollBar();

	if (!m_wndStatusBar.Create(this) ||
	!m_wndStatusBar.SetIndicators(indicators,
	  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return FALSE;      // fail to create
	}
	m_wndStatusBar.ShowWindow(SW_SHOW);
	m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,2,0);
	m_wndStatusBar.SetPaneInfo(1,ID_SEPARATOR,1,300);

	m_bCreated=true;

	ShowWindow(SW_MAXIMIZE);
	
	CalPageCount();
	SetLeftMargin();
	SetHVScrollRange();
	UpdateStatusBar();
	CalBeginAndEndIndex();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CRepTabDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
{
	// TODO: Add your message handler code here and/or call default
	pVScrollbar.SetScrollPos(pVScrollbar.GetScrollPos()-zDelta);
	UpDatePage();
	return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}

void CRepTabDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	UpDatePage();
	// Do not call CDialog::OnPaint() for painting messages
}

void CRepTabDlg::OnSize(UINT nType, int cx, int cy) 
{
if(!m_bCreated)
		return;
	CDialog::OnSize(nType, cx, cy);
	CRect rect;
	GetClientRect(rect);
	int nWidth=rect.Width();
	int nHeight=rect.Height();
	m_wndStatusBar.MoveWindow(0,nHeight-16,nWidth,16,TRUE);
	pHScrollbar.MoveWindow(0,nHeight-32,nWidth-16,16,TRUE);
	pVScrollbar.MoveWindow(nWidth-16,20,16,nHeight-52,TRUE);

	SetHVScrollRange();	
}

void CRepTabDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	CDialog::OnTimer(nIDEvent);
}

void CRepTabDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	if(pScrollBar==&pVScrollbar)
	{
		switch(nSBCode)
		{
		case SB_THUMBPOSITION:
			pVScrollbar.SetScrollPos(nPos);
		    break;
		case SB_LINEUP:
			pVScrollbar.SetScrollPos(pVScrollbar.GetScrollPos()-5);
			break;
		case SB_LINEDOWN:
			pVScrollbar.SetScrollPos(pVScrollbar.GetScrollPos()+5);
			break;	
		case SB_PAGEDOWN:
			pVScrollbar.SetScrollPos(pVScrollbar.GetScrollPos()+40);
			break;
		case SB_PAGEUP:
			pVScrollbar.SetScrollPos(pVScrollbar.GetScrollPos()-40);
			break;
		}
		UpDatePage();
	}
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

BOOL CRepTabDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	strTitle="";
	arrTxt.RemoveAll();
	nColCount=0;
	nRowCount=0;
	return CDialog::DestroyWindow();
}



void CRepTabDlg::DrawBK(CDC* pDC)
{
	CRect rect;
	GetClientRect(&rect);
	rect.top=27;
	rect.right-=16;
	rect.bottom-=32;
	pDC->SelectStockObject(2);
	pDC->Rectangle(rect);
	pDC->SelectStockObject(0);
}
//更新页
void CRepTabDlg::UpDatePage()
{
	CDC* pDC=GetDC();
//	CalPageCount();
//	CalBeginAndEndIndex();
	UpdateStatusBar();
	DrawBK(pDC);
	DrawPage(pDC);
	DrawCell(pDC);
	
	ReleaseDC(pDC);
}
void CRepTabDlg::CalPageCount()
{
	nPageCount=((nRowCount+1)*nRowHeight%(nPageHeight-2*nPageInTop))>0?(nRowCount+1)*nRowHeight/(nPageHeight-2*nPageInTop)+1:(nRowCount+1)*nRowHeight/(nPageHeight-2*nPageInTop);
//	nPageCount=1+(nRowHeight*nRowCount+nRowHeight)/(nPageHeight-2*nPageInTop);
}
//计算各页结束的行数
void CRepTabDlg::CalBeginAndEndIndex()

⌨️ 快捷键说明

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