📄 dlgdoc.cpp
字号:
((CAMSMaskedEdit*)Cell.pControl)->DestroyWindow();
delete (CAMSMaskedEdit*)Cell.pControl;
break;
case CDN_STATICIMAGE:
((CStaticImage*)Cell.pControl)->DestroyWindow();
delete (CStaticImage*)Cell.pControl;
break;
}//end switch
}//end for
}
///////////////////////////////////////////////
//创建控件
BOOL CDlgDoc::CreateControl(CDlgDataCell *pCell,
UINT nID,
RECT rect,
DWORD dwStyle,
DWORD dwStyleEx,
PDATAWINDOWVIEW pData)
///////////////////////////////////////////////
{
CString strCmd, strCell;
//垂直放大和水平放大
rect.bottom =rect.top+ (float)(rect.bottom-rect.top) * pCell->fZoomV;
rect.right =rect.left+ (float)(rect.right-rect.left) * pCell->fZoomH;
//7)是CheckBox
if (!lstrcmpi(pData->szType, "Button"))
{
char szBuf[255];
pCell->strClass = _T("CHECKBOX");
pCell->hWnd = pData->hWnd;
strcpy(szBuf, pCell->strText);
::SendMessage(pCell->hWnd, WM_SETTEXT, 0, (LPARAM)szBuf);
pCell->nClass = CDN_CHECKBOX;
if (pCell->strValues == _T("")) //默认
pCell->strValues=_T("N|Y|S");
return TRUE;
}
//修改类型
if (pCell->dwStyle & CDD_UPPER) //大写
dwStyle |= ES_UPPERCASE;
if (pCell->dwStyle & CDD_LOWER) //小写
dwStyle |= ES_LOWERCASE;
//1)生成EDIT
if (pCell->strClass == _T("EDIT"))
{
dwStyle |= ES_AUTOHSCROLL; //默认水平滚动
CEdit *pControl = new CEdit;
if (!pControl) return FALSE;
if (!pControl->CreateEx(dwStyleEx,
"Edit",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->m_hWnd;
pControl->SetFont(m_pDlg->GetFont());
return TRUE;
}
//5)生成ComboBox
if (pCell->strClass == _T("COMBOBOX"))
{
CComboBox *pControl = new CComboBox;
if (!pControl) return FALSE;
//修改类型
//默认滚动条+列表框
dwStyle |= CBS_AUTOHSCROLL|CBS_DROPDOWNLIST ;
if (!pControl->CreateEx(dwStyleEx,
"ComboBox",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->GetSafeHwnd();
pControl->SetFont(m_pDlg->GetFont());
strCmd = pCell->strValues;
for(;;)
{//1发现0最后一项-1没发现
int i = _GetCell(strCmd, strCell);
if (i >= 0)
pControl->AddString(strCell);
if (i <= 0)
break;
}
//int nIndex = atoi(pCell->strDefText);
//pControl->SetCurSel(nIndex);
return TRUE;
}
//6)生成ListBox
if (pCell->strClass == _T("LISTBOX"))
{
CListBox *pControl = new CListBox;
if (!pControl) return FALSE;
//除去这个否则不成功
dwStyle &= ~SS_LEFTNOWORDWRAP;
//默认滚动条+列表框
dwStyle |= LBS_STANDARD;
if (!pControl->CreateEx(dwStyleEx,
"ListBox",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->GetSafeHwnd();
pControl->SetFont(m_pDlg->GetFont());
strCmd = pCell->strValues;
for(;;)
{//1发现0最后一项-1没发现
int i = _GetCell(strCmd, strCell);
if (i >= 0)
pControl->AddString(strCell);
if (i <= 0)
break;
}
//int nIndex = atoi(pCell->strDefText);
//pControl->SetCurSel(nIndex);
return TRUE;
}
//9)生成DateTimeCtrl
if (pCell->nClass == CDN_LONGDATECTRL)
{
dwStyle |= DTS_LONGDATEFORMAT;
}
else if (pCell->nClass == CDN_SHORTDATECTRL)
{
dwStyle |= DTS_SHORTDATEFORMAT;
}
else if (pCell->nClass == CDN_TIMECTRL)
{
dwStyle |= DTS_TIMEFORMAT;
}
if (pCell->nClass == CDN_LONGDATECTRL ||
pCell->nClass == CDN_SHORTDATECTRL ||
pCell->nClass == CDN_TIMECTRL )
{
CDateTimeCtrl *pControl = new CDateTimeCtrl;
if (!pControl) return FALSE;
//默认
if (!pControl->CreateEx(dwStyleEx,
"SysDateTimePick32",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->GetSafeHwnd();
pControl->SetFont(m_pDlg->GetFont());
return TRUE;
}
//10)生成DateEdit
if (pCell->nClass == CDN_DATEEDIT ||
pCell->nClass == CDN_TIMEEDIT ||
pCell->nClass == CDN_DATETIMEEDIT)
{
CDateEdit *pControl = new CDateEdit;
if (!pControl) return FALSE;
//默认
if (!pControl->CreateEx(dwStyleEx,
"Edit",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->GetSafeHwnd();
pControl->SetFont(m_pDlg->GetFont());
pControl->SetClassType(pCell->strClass);
if(pCell->strDefText.Find(_T("NOW"))>=0) //设置默认时间
pControl->SetNow();
return TRUE;
}
//11)生成CurrencyEdit
if (pCell->strClass == _T("CURRENCYEDIT"))
{
CAMSCurrencyEdit *pControl = new CAMSCurrencyEdit;
if (!pControl) return FALSE;
//修改类型
dwStyle |= ES_AUTOHSCROLL; //默认水平滚动
if (!pControl->CreateEx(dwStyleEx,
"Edit",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->m_hWnd;
pControl->SetFont(m_pDlg->GetFont());
//1发现0最后一项-1没发现
strCmd = pCell->strValues;
int i = _GetCell(strCmd, strCell);
if (i >= 0)//整数长度
pControl->SetMaxWholeDigits(atoi(strCell));
i = _GetCell(strCmd, strCell);
if (i >= 0)//小数长度
pControl->SetMaxDecimalPlaces(atoi(strCell));
i = _GetCell(strCmd, strCell);
//if (i >= 0)//3分隔符
// pControl->SetDigitsInGroup(strCell.GetAt(0));
i = _GetCell(strCmd, strCell);
if (i >= 0)//4货币符
pControl->SetPrefix(strCell);
return TRUE;
}
//12)生成numericEdit
if (pCell->strClass == _T("NUMERICEDIT"))
{
CAMSAlphanumericEdit *pControl = new CAMSAlphanumericEdit;
if (!pControl) return FALSE;
//修改类型
dwStyle |= ES_AUTOHSCROLL; //默认水平滚动
if (!pControl->CreateEx(dwStyleEx,
"Edit",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->m_hWnd;
pControl->SetFont(m_pDlg->GetFont());
int nMax = atoi(pCell->strValues);
if (nMax > 0) //限制长度
pControl->SetMaxCharacters(nMax);
return TRUE;
}
//13)生成MaskedEdit
if (pCell->strClass == _T("MASKEDEDIT"))
{
CAMSMaskedEdit *pControl = new CAMSMaskedEdit;
if (!pControl) return FALSE;
//修改类型
dwStyle |= ES_AUTOHSCROLL; //默认水平滚动
if (!pControl->CreateEx(dwStyleEx,
"Edit",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->m_hWnd;
pControl->SetFont(m_pDlg->GetFont());
pControl->SetMask(pCell->strValues);
return TRUE;
}
//14)生成StaticImage
if (pCell->strClass == _T("STATICIMAGE"))
{
CStaticImage *pControl = new CStaticImage;
if (!pControl) return FALSE;
//修改类型
dwStyle |= ES_AUTOHSCROLL; //默认水平滚动
if (!pControl->CreateEx(dwStyleEx,
"Static",
NULL,
dwStyle, rect, m_pDlg, nID)) //创建
return FALSE;
pCell->pControl = (void *)pControl;
pCell->nID = nID;
pCell->hWnd = pControl->m_hWnd;
::SendMessage(pData->hWnd, WM_SETREDRAW, false, 0);
pControl->Load(pCell->strDefText);
return TRUE;
}
return true;
}
BOOL CDlgDoc::SetConnection(CAdoConnection *pCon)
{
if (pCon == NULL) return FALSE;
m_pConnection = pCon;
m_RecordSet.SetAdoConnection(pCon); //连结数据库
return TRUE;
}
/*========================================================================
Params:
- strSQL: SQL语句, 表名, 存储过程调用或持久 Recordset 文件名.
- CursorType: 可选. CursorTypeEnum 值, 确定打开 Recordset 时应该
使用的游标类型. 可为下列常量之一.
[常量] [说明]
-----------------------------------------------
adOpenForwardOnly 打开仅向前类型游标.
adOpenKeyset 打开键集类型游标.
adOpenDynamic 打开动态类型游标.
adOpenStatic 打开静态类型游标.
-----------------------------------------------
- LockType: 可选, 确定打开 Recordset 时应该使用的锁定类型(并发)
的 LockTypeEnum 值, 可为下列常量之一.
[常量] [说明]
-----------------------------------------------
adLockReadOnly 只读 - 不能改变数据.
adLockPessimistic 保守式锁定 - 通常通过在编辑时立即锁定数据源的记录.
adLockOptimistic 开放式锁定 - 只在调用 Update 方法时才锁定记录.
adLockBatchOptimistic 开放式批更新 - 用于批更新模式(与立即更新模式
相对).
-----------------------------------------------
- lOption 可选. 长整型值, 用于指示 strSQL 参数的类型. 可为下
列常量之一.
[常量] [说明]
-------------------------------------------------
adCmdText 指示strSQL为命令文本, 即普通的SQL语句.
adCmdTable 指示ADO生成SQL查询返回以 strSQL 命名的表中的
所有行.
adCmdTableDirect 指示所作的更改在strSQL中命名的表中返回所有行.
adCmdStoredProc 指示strSQL为存储过程.
adCmdUnknown 指示strSQL参数中的命令类型为未知.
adCmdFile 指示应从在strSQL中命名的文件中恢复保留(保存的)
Recordset.
adAsyncExecute 指示应异步执行strSQL.
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始
数量后, 应该异步提取所有剩余的行. 如果所需的行尚未
提取, 主要的线程将被堵塞直到行重新可用.
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞. 如果所请求
的行尚未提取, 当前行自动移到文件末尾.
==========================================================================*/
//////////////////////////////////////////////////////
//检索数据
//strSQL SQL检索命令
//strErr 发现错误提示命令
void CDlgDoc::RetrieveA(void){} //只为方便显示
int CDlgDoc::Retrieve(CString strSQL,
BOOL bMsg,
long lOption,
CursorTypeEnum CursorType,
LockTypeEnum LockType)
{
CDlgDataCell Cell;
CString strText;
if (!m_RecordSet.Open(strSQL,lOption, CursorType, LockType))
{
if (bMsg)
::MessageBox(NULL,"错误:检索数据库出错!","系统提示", MB_OK|MB_ICONEXCLAMATION);
return -1;
}
if (m_RecordSet.IsBOF() || m_RecordSet.IsEOF())
{
if (bMsg)
::MessageBox(NULL,"注意:没有发现任何资料!","系统提示", MB_OK|MB_ICONEXCLAMATION);
return 100;
}
//导入数据
for (int i=0; i < m_data.size(); i++)
{
Cell = m_data.at(i);
if ((Cell.dwStyle & CDD_RETRIEVE) &&
(m_RecordSet.GetCollect(Cell.strName, strText)))
{
SetWindowTextEx(&Cell, strText);
}
}
m_bModify = false;
return 0;
}
void CDlgDoc::Cancel()
{
m_RecordSet.CancelUpdate();
m_bModify = false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -