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

📄 dlgdoc.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -