📄 datawin.h
字号:
/*########################################################################
【文件名】: DataWin.h
【名 称】: DataWin 封装类.
【版 本】: 1.0
【作 者】: 梁均源
【E-mail】: KelvinSpace@citiz.net
注意:必需保留以上信息!!!
########################################################################*/
#if !defined(AFX_DATAWIN_H__4CC547C1_6875_11D9_AF5D_0050BAB04A6A__INCLUDED_)
#define AFX_DATAWIN_H__4CC547C1_6875_11D9_AF5D_0050BAB04A6A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
////////////////////////////////////////////////////////
//安装COM在新工程App文件
//App::InitInstance()加入
// CoInitialize(NULL);
//App::ExitInstance()加入
// CoUninitialize();
////////////////////////////////////////////////////////
// DataWin.h : header file
//
#define PNS_DATABASE 0x000000010 //数据项目
//#define PND_MAX_NAME 128 //默认名称最大字数
///////////////////////////////////////////////////////////
//对双缓存的控制
//缓存状态被改变后,并不马上生效,它必须在OnPaint事件中
//进行状态转换,这样做是为了避免在执行OnPaint事件时,
//刚好删除m_bkBitamp画面会乱,也不知道有没有这种可能了
#define PNR_DELETERAM -1 //删除缓存
#define PNR_DISABLEDRAM 0 //禁用缓存
#define PNR_CREATERAM 1 //创建缓存
#define PNR_USEDRAM 2 //正在使用缓存
#define PNR_REFURBISHRAM 3 //更新缓存
/*
/////////////////////////////////////////////////////////////////
//记录DataWin窗口内的所有控件
////////////////////////////////////////////////////////////////
typedef struct tagDATAWINDOWVIEW
{
HWND hWnd ; //窗口句柄
WNDPROC wpPrev; // 子类化之前的窗口回调函数地址
DWORD dwStyle; //窗口样式
DWORD dwStyleEx; //窗口扩展样式
RECT Rect; //窗口大小
int nID; //窗口ID
char szName[PND_MAX_NAME+1]; //窗口名称
char szType[PND_MAX_NAME+1]; //窗口类型
struct tagDATAWINDOWVIEW * pNext; // 指向下一个 CLASSXP 结构,这里采用单向链表结构
}DATAWINDOWVIEW, *PDATAWINDOWVIEW;
*/
/////////////////////////////////////////////////////////////////////////////
// CDataWin dialog
//*表示还没有实际使用
class CDataCell
{
public:
Reset();
CDataCell::CDataCell();
DWORD dwCommand; //命令类型
UINT nID; //控件ID
CDC *pDC; //绘图指针
int nCol; //当前行号
int nRow; //当前列号 *
CRect Rect; //区域
CString strName; //名称
COLORREF crTextColor; //文字颜色 Button: 文字
COLORREF crColor; //前景颜色 按钮颜色
COLORREF crBkColor; //背景颜色 边框颜色
COLORREF crBkColorParent; //父窗口背景色,用来刷新 *
int nBkMode; //是否透明背景
HWND hWnd; //窗口句柄
CString strType; //类型
CString strText; //显示文本
DWORD dwStyle ; //控件样式
DWORD dwStyleEx ; //控件扩展样式
DWORD dwState ; //控件状态
CFont *pFont; //当前字体
CPen *pPen; //当前绘笔
void *pDataEx; //扩展数据指针 *
DWORD dwDataEx; //扩展数据 *
DOUBLE xPix; //每mm对应象数
DOUBLE yPix; //每mm对应象数
BOOL bIsPrint ; //是否打印状态
float fZoomH; //水平放大
float fZoomV; //垂直放大
CString strValues; //取值范围
};
#include "..\Ado\ADO.H" //ADO类
#include "PreGraphic.H" //实际绘图类
#include "PrePrint.H" //打印机控制类
#include "PreDialog.H" //枚举窗口控件
//加对vector说明
#include <iostream>
#include <vector>
using namespace std;
class CDataWin : public CDialog
{
// Construction
public:
vector <CDataCell> m_dataPn; //数据库数据缓存
vector <CDataCell> m_data; //数据库数据缓存
vector <CDataCell> m_dataHead; //IDE窗口结构页头
vector <CDataCell> m_dataBody; //IDE窗口结构表体
vector <CDataCell> m_dataEnd; //IDE窗口结构表脚
vector <CDataCell> m_dataFoot; //IDE窗口结构页尾
//显示、打印流程控制
// BOOL m_bIsPrint; //正在打印
BOOL m_bRedraw; //允许重绘
// BOOL IsPrint(){return m_bIsPrint;} //当前是否打印状态
BOOL OnPrint(char * sTitle,UINT nPrintDlg = 0);//打印输出函数
virtual BOOL OnPrintStart();
virtual void OnPrintEnd();
virtual BOOL OnPageStart(BOOL bIsPrint = FALSE);
virtual void OnPageEnd(BOOL bIsPrint = FALSE);
virtual BOOL OnCellStart(CDataCell *pData, BOOL bIsPrint=FALSE);
virtual void OnCellEnd(CDataCell *pData, BOOL bIsPrint=FALSE);
void OnInitCell(CDataCell *pData, BOOL bIsPrint = TRUE);
int OnPaintDoubleRam(CDC &dc);
void OnPaintBase(CDC &dc); //实际显示
void OnPrintBase(CDC &dc); //实际打印
UINT m_nDoubleRam; //双缓存
CBitmap m_bkBitmap; //缓存句柄
CDC m_MemDC; //绘图句柄
//-1表示删除0禁止1创建2已生成3更新
BOOL SetDoubleRam(BOOL bFlag=TRUE);//是否双缓存
BOOL GetDoubleRam(); //返回双缓存状态
void RefurbishDoubleRam(); //更新双缓存
//设置、返回显示或打印绘图类
CPreGraphic *SetGraphic(CPreGraphic *p, BOOL bIsPrint=FALSE) ;//指定绘图类
CPreGraphic *GetGraphic(BOOL bIsPrint=FALSE) ; //返回当前绘图类
CDataWin(UINT nIDD, CWnd* pParent = NULL); // standard constructor
CDataWin(CWnd* pParent = NULL); // standard constructor
void CreateInit(void);
int m_nCellHeight; //行高
int m_nCell; //行内项目数
int m_nCellMax; //最大行号
int m_nCellMaxPn; //打印机最大行号
int m_nCellRow; //当前行
int m_nCellCol; //当前列
int m_nCellID; //当前ID
int m_nPage; //当前页
int m_nPagePn; //打印机当前页
int m_nPageMax; //最大页
int m_nPageMaxPn; //打印机最大页号
int m_nHead; //表头高度
int m_nBody; //表体高度
int m_nEnd; //表脚高度
int m_nFoot; //表尾高度
CBrush m_bkBrush; //背刷
COLORREF m_bkColor ; //背景色
COLORREF m_shadowColor; //阴影色
CPreGraphic *m_pGraphic; //绘图类
CPreGraphic *m_pGraphicPn; //绘图类
CPrePrint m_Print; //控制打印机类
int m_nFrameW; //虚拟显示时,左右边距
int m_nFrameH; //上下边距
CFont m_Font;
// Dialog Data
//{{AFX_DATA(CDataWin)
// enum { IDD = _UNKNOWN_RESOURCE_ID_ };
enum { IDD = 0};
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDataWin)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//枚举窗口控件
// PDATAWINDOWVIEW m_pDataWindow; //窗口控件属性表链指针,枚举时使用
// BOOL fnDelClassChild(); //删除表连
// BOOL fnEnumControl(); //枚举窗口控件
// static BOOL CALLBACK fnEnumWndProc(HWND hWnd, LPARAM lParam);//枚举返回函数
// static PDATAWINDOWVIEW WINAPI fnCreateClassChild(HWND hWnd, void *lParam); //创建表连
// static PDATAWINDOWVIEW fnGetClassChild(PDATAWINDOWVIEW pDataWindow,
// HWND hWnd, char *szType = 0);//取表连
// Generated message map functions
//{{AFX_MSG(CDataWin)
afx_msg void OnPaint();
afx_msg void OnDestroy();
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
void SetPageButton(CButton *pUp, CButton *pDown);
void PageUp();
void PageDown();
CButton *m_pUp;
CButton *m_pDown;
//翻页控制
int SetCurrentPage(int nPage, BOOL bIsPrint=FALSE) ;//设置当前页
int GetCurrentPage(BOOL bIsPrint=FALSE) ;//取当前页
int GetPageCount(BOOL bIsPrint=FALSE) ;//取总页数
//设置背景色
BOOL SetBkColor(COLORREF crColor ) { m_bkBrush.DeleteObject();m_bkColor=crColor;return m_bkBrush.CreateSolidBrush(crColor);}
BOOL GetBkColor( ) {return m_bkColor;}
//初始化
BOOL Init();
void InitBase(); //初设纸张为A4
BOOL Init4Control(); //从表连生成表格基本结构
// virtual BOOL InitConnect(); //创建数据库连接
virtual BOOL InitGraphic(void); //初设绘图类
void ResetAll(); //清除所有变量
//数据库
CAdoConnection *m_pConnection; //Ado数据库类
CAdoRecordSet m_RecordSet; //Ado表类
CString m_strDefSQL; //SQL
CAdoConnection *SetConnect(CAdoConnection *pConnection);//指定数据库连接
// void SetSQLText(CString &strSQL) {m_strDefSQL = strSQL;}
// virtual BOOL Open(CString &strSQL); //打开数据表
BOOL UpdateRecord(BOOL bIsPrint = false); //从数据库中导入数据
int Retrieve(LPCSTR pSQL, BOOL bMsg = true);
BOOL m_bSimple; //简单模式,一行一页
//打印
BOOL SetPrinter(LPTSTR pszPrinterName); //设置输出打印机
CString m_strPrinterName; //当前输出打印机NULL表示使用默认打印机
//虚拟显示模式
void SetPrintView(BOOL bPrintView=TRUE,
int nWidth = 10,
int nHeight =10); //模拟显示
BOOL GetPrintView(){return m_bIsPrintView;}
BOOL m_bIsPrintView;
//坐标转换
DOUBLE m_xPix; //每mm横向象数
DOUBLE m_yPix; //每mm纵向象数
int m_xScroll; //水平滚动象数
int m_yScroll; //垂直滚动象数
DOUBLE m_xZoom; //水平缩放
DOUBLE m_yZoom; //垂直缩放
//显示RECT使用-象数,打印RECT使用-mm//////////////////
//打印时才将mm转换成象数
CRect m_RectPage ; //显示尺寸-象数
CRect m_RectPrint; //打印尺寸-mm
BOOL SetPage(CString strName, BOOL bIsPrint = FALSE); //设置纸张类型
BOOL SetPage(int nWidth, int nHeight, BOOL bIsPrint = FALSE);//指定纸张尺寸
///////////////////////////////////////////////////////////
//坐标转换计算
void CalMulRect(LPRECT pRect,double xPix, double yPix);
int CalMulInt(int x, double dbPix);
void CalSize(CRect rect,DOUBLE xPix, DOUBLE yPix, BOOL bIsPrint = FALSE); //计算页数等
void CalScrollbar();
int GetScrollV(int yPos);
int GetScrollH(int xPos);
void GetPageRect(RECT *pRect);
//绘图函数
void DrawBack(CDC &dc); //绘背景
void DrawHead(CDC &dc,BOOL bIsPrint=FALSE); //绘头
void DrawBody(CDC &dc, int *nRow ,BOOL bIsPrint=FALSE); //绘表体
void DrawBodyPn(CDC &dc, int *nRow ,BOOL bIsPrint=FALSE); //打印表体
void DrawEnd(CDC &dc, int *nRow,BOOL bIsPrint=FALSE); //绘表尾
void DrawFoot(CDC &dc, int *nRow, BOOL bIsPrint=FALSE); //绘表尾
//其它
BOOL Construe(CDataCell *pCell, char *p);//语法分析
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DATAWIN_H__4CC547C1_6875_11D9_AF5D_0050BAB04A6A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -