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

📄 datawin.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// DataWin.cpp : implementation file
//

#include "stdafx.h"
//#include "previewdemo.h"
#include "DataWin.h"

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

///////////////////////////////////////////////////////////
//CDataCell
CDataCell::CDataCell()
{
	Reset();
}
CDataCell::Reset()
{
	dwCommand = 0;                   //命令类型
	nID = 0;                         //控件ID
	pDC = NULL;                      //绘图指针
	nCol = -1;                       //当前行号
	nRow = -1;                       //当前列号
	Rect.SetRect(0,0,0,0);           //区域
	strName = _T("");                //名称
	crTextColor = 0;                 //文字颜色
	crColor = 0;                     //前景颜色
	crBkColor = RGB(255,255,255);    //背景颜色
    crBkColorParent = crBkColor;     //父窗口背景色
	nBkMode = TRANSPARENT;           //是否透明背景
    hWnd = NULL;
	strText = _T("");
	strType = _T("");       //类型
	dwStyle = 0;            //样式 
	dwStyleEx = 0;          //扩展样式
	dwState = 0;            //控件状态
	pFont = NULL;           //当前字体
	pPen  = NULL;           //当前CPen,只在画线时用到
	pDataEx = NULL;         //扩展数据指针  *
	dwDataEx = 0;           //扩展数据      *
 	xPix = 1;               //每mm对应象数
	yPix = 1;               //每mm对应象数
    bIsPrint = FALSE;       //是否为打印状态
	fZoomH = 1;             //水平放大
	fZoomV = 1;             //垂直放大
	strValues = _T("");     //取值范围
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

CDataWin::CDataWin(UINT nIDD, CWnd* pParent /*=NULL*/)
	: CDialog(nIDD, pParent)
{
	//{{AFX_DATA_INIT(CDataWin)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	CreateInit();
}
CDataWin::CDataWin(CWnd* pParent /*=NULL*/)
	: CDialog(CDataWin::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlg1)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	CreateInit();
}
void CDataWin::CreateInit(void)
{
	m_nPageMax = 1;
	m_nCellMax = 0;

	m_nHead=m_nBody=m_nEnd=m_nFoot=0;
	m_nCellCol=m_nCellHeight=m_nCellID=0;
	m_nCellRow=m_nCell=0;
	m_nPage = 0; 
	m_nPagePn=m_nPageMaxPn=0;
	m_RectPage.SetRect(0,0,0,0);     //显示尺寸
	SetPage("A4", true);             //打印尺寸
    m_shadowColor = RGB(68,68,68);
	m_bkColor = RGB(255,255,255);
	m_bkBrush.CreateSolidBrush(m_bkColor); //背景
	m_strDefSQL = _T("");
//	m_bIsPrint = FALSE;
	m_bRedraw  = TRUE;
	m_pGraphic = m_pGraphicPn = NULL;
	m_pConnection = NULL;
	m_strPrinterName= _T("");
	m_bIsPrintView = TRUE;
	m_xPix = 1;
	m_yPix = 1;
	m_xScroll = 0;
	m_yScroll = 0;
	m_nFrameW  = 10;         //虚拟显示时,左右边距
	m_nFrameH  = 10;         //上下边距
    m_nDoubleRam = PNR_DISABLEDRAM;        //双缓存
    m_xZoom = 0.5;          //水平缩放
	m_yZoom = 1;         //垂直缩放
	m_bSimple = false;   //简单模式,一行一责
	m_pUp = NULL;        //上翻页
	m_pDown = NULL;      //下翻页
}


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


BEGIN_MESSAGE_MAP(CDataWin, CDialog)
	//{{AFX_MSG_MAP(CDataWin)
	ON_WM_PAINT()
	ON_WM_DESTROY()
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_WM_SIZE()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*
/////////////////////////////////////////////////////////////////////////////
//创建数据库连接
BOOL CDataWin::InitConnect()
{
	if(m_pConnection==NULL)
	{
	  m_pConnection = new CAdoConnection;
	  if (m_pConnection == NULL)return FALSE;
	}
	return m_pConnection->ConnectDef();
}
*/
//指定数据库连接
CAdoConnection *CDataWin::SetConnect(CAdoConnection *pConnection)
{
	CAdoConnection *pOld;
	pOld = m_pConnection;
	m_pConnection = pConnection;
	m_RecordSet.SetAdoConnection(pConnection);
	return pOld;
}

BOOL CDataWin::Init()
{
   InitGraphic();                //创建绘图类
   ResetAll();                   //复位所有变量
   InitBase();                   //修改窗口风格、初始化纸张
// fnEnumControl();              //枚举所有子窗口
   if(!Init4Control()) return FALSE;    //初始化窗口结构
// InitConnect();                //连结数据库
// Open(m_strDefSQL);            //打开表格
// UpdateRecord();	             //载入数据库数据
   ShowWindow(SW_SHOW);
   return TRUE;
}

////////////////////////////////////////////////
//设置区域1)显示区域-象数
//        2)打印区域-mm
//动态修改时应自行刷新
BOOL CDataWin::SetPage(CString strName, BOOL bIsPrint)
{
  CRect rect(0,0,0,0);
  BOOL bFound = FALSE; 
  if(strName = "A4")
  {
	rect.SetRect(0,0,210, 297);
    bFound = TRUE;
  }
  else if(strName="A5")
  {
	rect.SetRect(0,0,148, 210);
    bFound = TRUE;
  }
//设置
  if(bFound && bIsPrint) //设置打印机纸张
  {
	m_RectPrint = rect;
  }
  if(bFound && !bIsPrint)//设置显示纸张
  {
	m_RectPage.SetRect(0,0,rect.Width()*m_xPix,rect.Height()*m_yPix);
	CalSize(m_RectPage, m_xPix, m_yPix); //重新计算页面
	RefurbishDoubleRam(); //更新
  }
  return bFound;
}
////////////////////////////////////////////////////
//指定区域1)显示-象数 2)打印区域-mm
//动态修改时应自行刷新
BOOL CDataWin::SetPage(int nWidth, int nHeight, BOOL bIsPrint)
{
 if(bIsPrint)
  m_RectPrint.SetRect(0,0,nWidth, nHeight);
 else
 {
    m_RectPage.SetRect(0,0,nWidth, nHeight);
	CalSize(m_RectPage, m_xPix, m_yPix);    //重新计算页面
	RefurbishDoubleRam(); //更新
 }
  return TRUE;
}
/////////////////////////////////////////////////////
//打印主函数
void CDataWin::OnPrintBase(CDC &dc)
{
	int row;
	if(m_RectPage.Width()==0 && m_RectPage.Height()==0)
		return; //没有初始化
//	DrawBack(dc);  // 画背景
	DrawHead(dc);  //画页头
	DrawBodyPn(dc, &row, TRUE); //表体
	DrawEnd(dc, &row, TRUE);  //表尾
	DrawFoot(dc, &row, TRUE); //页尾
}
////////////////////////////////////////////////////
//旧代码
/*
void CDataWin::OnPaintBase(CDC &dc)
{
    CRect rect, rect2, rtClient;
    CDataCell data;
	CBrush Brush;
	int i, j;
//坐标转换
	DOUBLE xPix = m_xPix;
	DOUBLE yPix = m_yPix;
	rect.SetRect(0,0,m_RectPage.Width()*xPix, m_RectPage.Height()*yPix);
//计算滚动条相对位移
    int xScroll = ::GetScrollPos(GetSafeHwnd(), SB_HORZ);
    int yScroll = ::GetScrollPos(GetSafeHwnd(), SB_VERT);
    GetClientRect(&rtClient);
	DOUBLE xPixChange = 1;  //相对象数转换
	DOUBLE yPixChange = 1;  //相对象数转换
	if(m_bIsPrintView)//模似显示
	{
//画外框
	xScroll = xScroll*(rect.Width()-rtClient.Width()+14)/100;
	yScroll = yScroll*(rect.Height()-rtClient.Height()+14)/100;
	dc.SetWindowOrg(xScroll, yScroll);
	rect2 = rect;
	  Brush.CreateSolidBrush(RGB(255,0,0));
	  rect2.InflateRect(1,1);
	  rect2.OffsetRect(5,5);
	  dc.FrameRect(&rect2, &Brush);
	  Brush.DeleteObject();
//画内框
	  Brush.CreateSolidBrush(RGB(255,255,255));
	  rect2.DeflateRect(1,1);
	  dc.FrameRect(&rect2, &Brush);
//位移至框内
      dc.SetWindowOrg(-7+xScroll,-7+yScroll);
	}
	else
	{
	xScroll = xScroll*(rect.Width()-rtClient.Width())/100;
	yScroll = yScroll*(m_nHead+m_nEnd+m_nFoot+
		               m_nCellMax*m_nCellHeight-rtClient.Height())/100;
	dc.SetWindowOrg(xScroll, yScroll);
	rect2 = rect;
	}
	CalSize(dc, rect);  //计算页数
	int nHeight = m_nCellHeight;
//画页头
	for (i = 0; i < m_dataHead.size(); i++)
	{
		data = m_dataHead.at(i);
		data.pDC = &dc;
		CalMulRect(&data.Rect,xPix,yPix);
		data.xPix = xPixChange; data.yPix=yPixChange;
		if(OnCellStart(&data))
		  m_pGraphic->DrawItem((void*)&data);
		OnCellEnd(&data);
	}
//画表体
	int row = -1;   
	if(m_pConnection != NULL && m_pConnection->IsOpen())
	{//i=总项目、j=单页总项目
	for (i =m_nPage*m_nCellMax*m_nCell, j = 0; i < m_data.size()  && (j < m_nCellMax*m_nCell || !GetPrintView()); i++, j++)
	{//列举数据库项目
		if(!(j % m_nCell)) //新行
		{//输出非数据库项目
			row++;
		    if(row > m_nCellMax) break;       //大于最大行数
	        for (int k = 0; k < m_dataBody.size() ; k++)
			{
		      data = m_dataBody.at(k);
			  if(m_dataBody.at(k).dwCommand != PNS_DATABASE)
			  {
		       data.pDC = &dc;
		       data.nRow = row;
	           data.Rect.top += row * nHeight;
		       data.Rect.bottom += row * nHeight;
		       CalMulRect(&data.Rect,xPix,yPix);
		       data.xPix = xPixChange; data.yPix=yPixChange;
		       if(OnCellStart(&data))
		          m_pGraphic->DrawItem((void*)&data);
		       OnCellEnd(&data);
			  }
			}

		}
        //输出数据库项目
		data = m_data.at(i);   
		data.pDC = &dc;
		data.nRow = row;
	    data.Rect.top += row * nHeight;
		data.Rect.bottom += row * nHeight;
		CalMulRect(&data.Rect,xPix,yPix);
		data.xPix = xPixChange; data.yPix=yPixChange;
		if(OnCellStart(&data))
		  m_pGraphic->DrawItem((void*)&data);
		OnCellEnd(&data);
	}//end for
	}//end if
//画表脚
	if(m_nPage == m_nPageMax-1)
	{
	row++;
	for (i = 0; i < m_dataEnd.size() ; i++)
	{
		data = m_dataEnd.at(i);
		data.pDC = &dc;
		data.nRow = -1;
		data.Rect.top += row * nHeight;
		data.Rect.bottom += row * nHeight;
		CalMulRect(&data.Rect,xPix,yPix);
		data.xPix = xPixChange; data.yPix=yPixChange;
		if(OnCellStart(&data))
		   m_pGraphic->DrawItem((void*)&data);
		OnCellEnd(&data);
	}
	}
//画页尾
	for (i = 0; i < m_dataFoot.size(); i++)
	{
		data = m_dataFoot.at(i);
		data.pDC = &dc;
		rect2 = data.Rect;
		data.Rect.bottom  = rect.bottom-rect2.bottom;
		data.Rect.top = data.Rect.bottom-(rect2.bottom-rect2.top);
		CalMulRect(&data.Rect,xPix,yPix);
		data.xPix = xPixChange; data.yPix=yPixChange;
		if(OnCellStart(&data))
		  m_pGraphic->DrawItem((void*)&data);
		OnCellEnd(&data);
	}
	
}
*/
//////////////////////////////////////////////////
//默认CELL初始化函数
void CDataWin::OnInitCell(CDataCell *pData, BOOL bIsPrint)
{
static char s_szClass[][32] = 
	{
		"Button",					// 按钮类0
		"Edit",						// 编辑框类1
		"ComboBox",					// 组合框类2
        "ListBox",                  // 列表框3
		"ScrollBar",                // 滚动条4
		"Static",                   // 说明条5
		"#32770",                   // 窗口6
	    "msctls_hotkey32",			// 热键7
		"SysIPAddress32",			// IP 地址8
		"SysListView32",			// 列表查看9
		"SysTreeView32",			// 树形查看10
		"SysDateTimePick32",		// 日期/时间选择11
		"msctls_updown32",			// 旋转12
		"SysMonthCal32",			// 月历13
		"SysTabControl32",			// TAB 控件14
		"msctls_progress32",		// 进度条15
		"msctls_trackbar32",		// 追踪条16
	};
  if(pData->pDC==NULL)return ;
  for (int lReturn = 0; lReturn < (sizeof(s_szClass) / sizeof(s_szClass[0])); lReturn++)
		if (pData->strType == s_szClass[lReturn])
			break;
  
  DWORD dwStyle = pData->dwStyle;
  pData->crBkColorParent = GetBkColor();
  switch (lReturn)
  {
  case 0: //按钮
	switch (dwStyle & SS_TYPEMASK)
	{
		case BS_DEFPUSHBUTTON:		// 默认按钮
		case BS_PUSHBUTTON:			// 普通按钮
              pData->crBkColor = GetSysColor(COLOR_BTNFACE);
             break;
		case BS_CHECKBOX:			// 复选框
		case BS_AUTOCHECKBOX:		// 自动复选框
		case BS_3STATE:				// 三状态复选框
		case BS_AUTO3STATE:			// 自动三状态复选框
			if (!(dwStyle & BS_PUSHLIKE)) //不是按钮
              pData->crBkColor = GetBkColor();
            break;
		case BS_RADIOBUTTON:		// 单选框
		case BS_AUTORADIOBUTTON:	// 自动单选框
			if (!(dwStyle & BS_PUSHLIKE))
              pData->crBkColor = GetBkColor();
			break;
		case BS_GROUPBOX:	// 分组框
              pData->crBkColor = GetBkColor();
			 break;
	}
	break;
  }//end switch
}
///////////////////////////////////////////////////////////
//双缓存绘制
int CDataWin::OnPaintDoubleRam(CDC &dc)
{
	CRect rtClient, rtAll, rtFree;
    int xPos,yPos,xScroll, yScroll;
	int nHeight, nWidth ;
//双缓存
  switch(m_nDoubleRam)
	{
	case PNR_DELETERAM:   //删除双缓存方式
		m_nDoubleRam = 0;
		m_bkBitmap.DeleteObject();
		m_MemDC.DeleteDC();
		return 0;
	case PNR_DISABLEDRAM: 
		return 0;
    case PNR_REFURBISHRAM://更新
  	    m_nDoubleRam = 1;
	    m_bkBitmap.DeleteObject();
	    m_MemDC.DeleteDC();///////////////////////
	case PNR_CREATERAM:    //新建
        ::SetScrollPos(GetSafeHwnd(), SB_VERT,0, TRUE);
        ::SetScrollPos(GetSafeHwnd(), SB_HORZ,0, TRUE);
        if(!m_MemDC.CreateCompatibleDC(&dc))
		{
	       m_nDoubleRam = 0;
	       return 0;
		}
       GetPageRect(rtAll);
       if(!m_bkBitmap.CreateCompatibleBitmap(&dc,rtAll.Width(),
                 rtAll.Height()))
	   {
	        m_nDoubleRam = 0;
	        m_MemDC.DeleteDC();
	        return 0;
	   }
       m_MemDC.SelectObject(&m_bkBitmap);
	   m_nDoubleRam = 2;
	   return 1;
	case PNR_USEDRAM://真正绘制
       xPos = ::GetScrollPos(GetSafeHwnd(), SB_HORZ);
       yPos = ::GetScrollPos(GetSafeHwnd(), SB_VERT);
       GetPageRect(rtAll);
	   xScroll = GetScrollH(xPos);
	   yScroll = GetScrollV(yPos);
       GetClientRect(&rtClient);
	   dc.BitBlt(0, 0, rtClient.Width(), rtClient.Height(),
                   &m_MemDC, xScroll, yScroll, SRCCOPY);
//       dc.StretchBlt(0, 0, rtClient.Width(),rtClient.Height(),
//		                &m_MemDC, xScroll, yScroll, 
  //                      rtAll.Width(),
	//					rtAll.Height(), 

⌨️ 快捷键说明

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