📄 dlgdoc.cpp
字号:
// DlgDoc.cpp : implementation file
//
//////////////////////////////////////////////////////
//利用非模窗口生成输入窗口
//=id 等号加数据库表项
//
//
//
//
//
//////////////////////////////////////////////////////
#include "stdafx.h"
//#include "print.h"
#include "DlgDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "..\MaskEdit\amsEdit.H"
/////////////////////////////////////////////////////////////////////////////
// CDlgData dialog
CDlgDoc::CDlgDoc()
{
m_pConnection = NULL;
m_pDlg = NULL;
m_nBeginID = BEGIN_ID;
m_strKey = _T("");
m_strText = _T("");
m_dwDefStyle = CDD_RETRIEVE|CDD_UPDATE|CDD_CHECK;
m_bOracle = false;
m_bModify = false;
}
CDlgDoc::~CDlgDoc()
{
///////////////////////////////////////////////
//创建控件
Release();
m_data.clear();
m_Sur.clear();
}
/////////////////////////////////////////////////////////////////////////////
// CDlgData message handlers
BOOL CDlgDoc::Init(CDialog *pDlg)
{
CPreDialog PreDlg;
if (pDlg == NULL) return FALSE;
m_data.clear();
m_pDlg = pDlg;
PreDlg.Enum(pDlg); //枚举窗口结构
Init4Control(&PreDlg);
return TRUE;
}
////////////////////////////////////////
//从IDE窗口创建结构
//pPreDlg 枚举窗口指针
BOOL CDlgDoc::Init4Control(CPreDialog *pPreDlg)
{
CRect rect;
CDlgDataCell Cell;
DWORD dwStyle, dwStyleEx;
BOOL bCheckbox;
PDATAWINDOWVIEW pData = pPreDlg->GetControl();
//取出每一控件
for (;pData != NULL;pData = pData->pNext)
{
bCheckbox = false;
Cell.Reset();
//不是=NAME格式、不是CSTATIC类、不是CheckBox
if((lstrcmpi(pData->szType, "Static") &&
lstrcmpi(pData->szType, "Button")) ||
pData->szName == NULL ||
pData->szName[0] != '=')
{//一般控件
continue;
}
//是按钮,是CHECKBOX按钮
if(!lstrcmpi(pData->szType, "Button"))
{
switch (pData->dwStyle & SS_TYPEMASK)
{
case BS_CHECKBOX: // 复选框
case BS_AUTOCHECKBOX: // 自动复选框
case BS_3STATE: // 三状态复选框
case BS_AUTO3STATE: // 自动三状态复选框
bCheckbox = true;
break;
default: continue;
}
}
//数据项控件
if (!Construe(&Cell, pData->szName)) //语法分析
{
TRACE("错误:语法分析出错");
continue;
}
//创建EDIT
m_nBeginID++;
dwStyle = pData->dwStyle; //类型转换
dwStyleEx = pData->dwStyleEx; //类型转换
rect = pData->Rect; //位置
m_pDlg->ScreenToClient(rect);
Cell.nOldID = pData->nID;
if (!CreateControl(&Cell,
m_nBeginID,
rect,
dwStyle,
dwStyleEx,
pData)) //创建分析
{
TRACE("错误:创建控件出错");
continue;
}
//隐藏、禁止TAB键
if(bCheckbox == false)
{
//::SendMessage(pData->hWnd,WM_SETREDRAW,FALSE,0);//隐藏
::SendMessage(pData->hWnd, WM_SHOWWINDOW, false, 0); //关闭原STATIC
dwStyle = GetWindowLong(pData->hWnd, GWL_STYLE);
SetWindowLong(pData->hWnd, GWL_STYLE, dwStyle &~WS_TABSTOP);
}
m_data.push_back(Cell);
}//end for
return TRUE;
}
///////////////////////////////////////////////
//句法分析
BOOL CDlgDoc::Construe(CDlgDataCell *pCell, char *p)
///////////////////////////////////////////////
{
int iBegin=0, i=0, j;
BOOL bExit = false, bDel = true;
char cCode;
CString strText = _T("");
CString strCmd = p;
CString strCell;
//去空格、等号
strCmd.MakeUpper();
strCmd = strCmd.Right(strCmd.GetLength()-1);
for (i = 0; i < strCmd.GetLength(); i++)
{
cCode = strCmd.GetAt(i);
if (cCode == ';') //;右边可以删除空格
bDel = true;
else if (cCode == '=') //=右边禁止删除空格
bDel = false;
else if(bDel == TRUE && cCode == ' ')
continue; //删除空格
strText = strText + strCmd.Mid(i, 1);
}
//默认值
pCell->strClass = _T("EDIT");
pCell->nClass = CDN_EDIT;
pCell->dwStyle = m_dwDefStyle;
//取数据项名
i = strText.Find(';');
if ( i < 0) //无项目设置
{
pCell->strName = strText;
return true;
}
else
{
iBegin = i + 1; //移动指针
pCell->strName = strText.Left(i);
goto next01;
}
for(;;)
{
//20)CurrencyEdit指定数字输入
j = strCmd.Find("CURRENCYEDIT=");
if (j >= 0)
{
pCell->strClass = strCmd.Right(strCmd.GetLength()-j-13);
goto next01;
}
//21)MaskedEdit指定掩码输入
j = strCmd.Find("MASKEDEDIT=");
if (j >= 0)
{
pCell->strClass = strCmd.Right(strCmd.GetLength()-j-11);
goto next01;
}
//22)NumericEdit指定输入长度
j = strCmd.Find("NUMERICEDIT=");
if (j >= 0)
{
pCell->strClass = strCmd.Right(strCmd.GetLength()-j-12);
goto next01;
}
//1)CLASS指定类名
j = strCmd.Find("CLASS=");
if (j >= 0)
{
pCell->strClass = strCmd.Right(strCmd.GetLength()-j-6);
pCell->nClass = _Class4Name(pCell->strClass);
goto next01;
}
//6)DEFAULT默认输入
j = strCmd.Find("DEFAULT=");
if (j >= 0)
{
pCell->strDefText = strCmd.Right(strCmd.GetLength()-j-8);
goto next01;
}
//6)TEXT指定显示文本
j = strCmd.Find("TEXT=");
if (j >= 0)
{
pCell->strText = strCmd.Right(strCmd.GetLength()-j-5);
goto next01;
}
//7)VALUES指定取值范围
j = strCmd.Find("VALUES=");
if (j >= 0)
{
pCell->strValues = strCmd.Right(strCmd.GetLength()-j-7);
goto next01;
}
//9)ZOOMH垂直放大
j = strCmd.Find("ZOOMH=");
if (j >= 0)
{
pCell->fZoomH = atof(strCmd.Right(strCmd.GetLength()-j-6));
goto next01;
}
//10)ZOOMV水平放大
j = strCmd.Find("ZOOMV=");
if (j >= 0)
{
pCell->fZoomV = atof(strCmd.Right(strCmd.GetLength()-j-6));
goto next01;
}
//11)SETKEY设置主键
j = strCmd.Find("SETKEY=");
if (j >= 0)
{
#if _DEBUG //设置双主键错误
if(m_strKey != _T(""))
AfxMessageBox("语法错误:发现两个以上的主键 " +
m_strKey + " 和 " + pCell->strName);
#endif
m_strKey = pCell->strName;
m_strText = strCmd.Right(strCmd.GetLength()-j-7);
pCell->strText = m_strText;
goto next01;
}
//12)设置类型
j = strCmd.Find("STYLE=");
if (j >= 0)
{//取类型
strCmd = strCmd.Right(strCmd.GetLength()-j-6);
for(;;)
{//取出|符分格的项目1发现0最后一项-1没发现
j = _GetCell(strCmd, strCell);
if (j >= 0)
{
if (strCell.Find(_T("AUTOKEY"))>=0) pCell->dwStyle |= CDD_AUTOKEY;
if (strCell.Find(_T("CHECK"))>=0) pCell->dwStyle |= CDD_CHECK;
if (strCell.Find(_T("RETRIEVE"))>=0) pCell->dwStyle |= CDD_RETRIEVE;
if (strCell.Find(_T("UPDATE"))>=0) pCell->dwStyle |= CDD_UPDATE;
if (strCell.Find(_T("UPPER"))>=0) pCell->dwStyle |= CDD_UPPER;
if (strCell.Find(_T("LOWER"))>=0) pCell->dwStyle |= CDD_LOWER;
if (strCell.Find(_T("RIGHT"))>=0) pCell->dwStyle |= CDD_RIGHT;
if (strCell.Find(_T("CENTER"))>=0) pCell->dwStyle |= CDD_CENTER;
if (strCell.Find(_T("LEFT"))>=0) pCell->dwStyle |= CDD_LEFT;
if (strCell.Find(_T("UN_CHECK"))>=0) pCell->dwStyle &= ~CDD_CHECK;
if (strCell.Find(_T("UN_RETRIEVE"))>=0) pCell->dwStyle &= ~CDD_RETRIEVE;
if (strCell.Find(_T("UN_UPDATE"))>=0) pCell->dwStyle &= ~CDD_UPDATE;
}
if (j <= 0) break;
}
goto next01;
}
//13)WIDTH表示LISTCTRL中的宽度,默认为0
j = strCmd.Find("WIDTH=");
if (j >= 0)
{
pCell->nWidth = atoi(strCmd.Right(strCmd.GetLength()-j-6));
goto next01;
}
//14)INDEX表示LISTCTRL中的列号
j = strCmd.Find("INDEXCOL=");
if (j >= 0)
{
pCell->iIndexCol = atoi(strCmd.Right(strCmd.GetLength()-j-9));
goto next01;
}
next01: //取出;号分格项目
if (bExit) break; //退出
i = strText.Find(';', iBegin);
if ( i < 0)
{
strCmd = strText.Right(strText.GetLength()-iBegin);
bExit = true; //最后一项
}
else
{
strCmd = strText.Mid(iBegin, i-iBegin);
iBegin = i+1; //移动一项
}
}//end for
return true;
}
///////////////////////////////////////////////
//删除控件
void CDlgDoc::Release(void)
{
m_strKey = _T("");
m_strText = _T("");
ReleaseControl();
m_data.clear();
}
void CDlgDoc::ReleaseControl(void)
{
CDlgDataCell Cell;
for(int i = 0 ; i < m_data.size(); i++)
{
Cell = m_data.at(i);
int j = Cell.nClass;
if(Cell.pControl == NULL) continue;
switch(j)
{
case CDN_EDIT:
((CEdit*)Cell.pControl)->DestroyWindow();
delete (CEdit*)Cell.pControl;
break;
case CDN_COMBOBOX:
((CComboBox*)Cell.pControl)->DestroyWindow();
delete (CComboBox*)Cell.pControl;
break;
case CDN_LISTBOX:
((CListBox*)Cell.pControl)->DestroyWindow();
delete (CListBox*)Cell.pControl;
break;
case CDN_LONGDATECTRL:
case CDN_SHORTDATECTRL:
case CDN_TIMECTRL:
((CDateTimeCtrl *)Cell.pControl)->DestroyWindow();
delete (CDateTimeCtrl *)Cell.pControl;
break;
case CDN_DATETIMEEDIT:
case CDN_DATEEDIT:
case CDN_TIMEEDIT:
((CEdit*)Cell.pControl)->DestroyWindow();
delete (CEdit*)Cell.pControl;
break;
case CDN_CURRENCYEDIT:
((CDateEdit *)Cell.pControl)->DestroyWindow();
delete (CDateEdit*)Cell.pControl;
break;
case CDN_NUMERICEDIT:
((CAMSNumericEdit*)Cell.pControl)->DestroyWindow();
delete (CAMSNumericEdit*)Cell.pControl;
break;
case CDN_MASKEDEDIT:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -