📄 daoview.cpp
字号:
CDaoRecordset* pRecordset)
{
if (!AfxFieldText(pDX, nIDC, &value, pRecordset))
DDX_Text(pDX, nIDC, value);
}
void AFXAPI DDX_FieldText(CDataExchange* pDX, int nIDC, double& value,
CDaoRecordset* pRecordset)
{
if (!AfxFieldText(pDX, nIDC, &value, pRecordset))
DDX_Text(pDX, nIDC, value);
}
void AFXAPI DDX_FieldText(CDataExchange* pDX, int nIDC, COleDateTime& value,
CDaoRecordset* pRecordset)
{
if (!AfxFieldText(pDX, nIDC, &value, pRecordset))
DDX_Text(pDX, nIDC, value);
}
void AFXAPI DDX_FieldText(CDataExchange* pDX, int nIDC, CString &value,
CDaoRecordset* pRecordset)
{
if (!AfxFieldText(pDX, nIDC, &value, pRecordset))
DDX_Text(pDX, nIDC, value);
}
void AFXAPI DDX_FieldText(CDataExchange* pDX, int nIDC, LPTSTR pstrValue,
int nMaxLen, CDaoRecordset* pRecordset)
{
if (!AfxFieldText(pDX, nIDC, &pstrValue, pRecordset))
DDX_Text(pDX, nIDC, pstrValue, nMaxLen);
}
void AFXAPI DDX_FieldLBString(CDataExchange* pDX, int nIDC, CString& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
int nIndex = (int)::SendMessage(hWndCtrl, LB_GETCURSEL, 0, 0L);
if (nIndex != -1)
{
int nLen = (int)::SendMessage(hWndCtrl, LB_GETTEXTLEN, nIndex, 0L);
::SendMessage(hWndCtrl, LB_GETTEXT, nIndex,
(LPARAM)(LPSTR)value.GetBuffer(nLen));
if (nLen == 0)
{
if (pRecordset->IsFieldNullable(&value))
pRecordset->SetFieldNull(&value, TRUE);
}
else
{
pRecordset->SetFieldNull(&value, FALSE);
}
value.ReleaseBuffer();
}
else
{
// no selection
value.GetBufferSetLength(0);
if (pRecordset->IsFieldNullable(&value))
pRecordset->SetFieldNull(&value);
}
}
else
{
if (!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value))
{
SendMessage(hWndCtrl, LB_SETCURSEL, (WPARAM)-1, 0L);
}
else
{
// set current selection based on data string
if (::SendMessage(hWndCtrl, LB_SELECTSTRING, (WPARAM)-1,
(LPARAM)(LPCTSTR)value) == LB_ERR)
{
// no selection match
TRACE0("Warning: no listbox item selected.\n");
}
}
}
}
void AFXAPI DDX_FieldLBStringExact(CDataExchange* pDX, int nIDC, CString& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
DDX_FieldLBString(pDX, nIDC, value, pRecordset);
}
else
{
if (!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value))
{
SendMessage(hWndCtrl, LB_SETCURSEL, (WPARAM)-1, 0L);
}
else
{
// set current selection based on data string
int i = (int)::SendMessage(hWndCtrl, LB_FINDSTRINGEXACT, (WPARAM)-1,
(LPARAM)(LPCTSTR)value);
if (i < 0)
{
// no selection match
TRACE0("Warning: no listbox item selected.\n");
}
else
{
// select it
SendMessage(hWndCtrl, LB_SETCURSEL, i, 0L);
}
}
}
}
void AFXAPI DDX_FieldCBString(CDataExchange* pDX, int nIDC, CString& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
// just get current edit item text (or drop list static)
int nLen = ::GetWindowTextLength(hWndCtrl);
if (nLen != -1)
{
// get known length
::GetWindowText(hWndCtrl, value.GetBuffer(nLen), nLen+1);
}
else
{
// for drop lists GetWindowTextLength does not work - assume
// preallocated length (or 256, whichever is larger)
nLen = value.GetAllocLength();
if (nLen < 256)
nLen = 256;
::GetWindowText(hWndCtrl, value.GetBuffer(nLen-1), nLen);
}
value.ReleaseBuffer();
if (value.GetLength() == 0)
{
if (pRecordset->IsFieldNullable(&value))
pRecordset->SetFieldNull(&value, TRUE);
}
else
{
pRecordset->SetFieldNull(&value, FALSE);
}
}
else
{
if (!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value))
{
SendMessage(hWndCtrl, CB_SETCURSEL, (WPARAM)-1, 0L);
}
else
{
// set current selection based on model string
if (::SendMessage(hWndCtrl, CB_SELECTSTRING, (WPARAM)-1,
(LPARAM)(LPCTSTR)value) == CB_ERR)
{
// just set the edit text (will be ignored if DROPDOWNLIST)
AfxSetWindowText(hWndCtrl, value);
}
}
}
}
void AFXAPI DDX_FieldCBStringExact(CDataExchange* pDX, int nIDC, CString& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
DDX_FieldCBString(pDX, nIDC, value, pRecordset);
}
else
{
if (!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value))
{
SendMessage(hWndCtrl, CB_SETCURSEL, (WPARAM)-1, 0L);
}
else
{
// set current selection based on data string
int i = (int)::SendMessage(hWndCtrl, CB_FINDSTRINGEXACT, (WPARAM)-1,
(LPARAM)(LPCTSTR)value);
if (i < 0)
{
// no selection match
TRACE0("Warning: no combobox item selected.\n");
}
else
{
// select it
SendMessage(hWndCtrl, CB_SETCURSEL, i, 0L);
}
}
}
}
void AFXAPI DDX_FieldLBIndex(CDataExchange* pDX, int nIDC, int& index,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
if (!pDX->m_bSaveAndValidate &&
(!pRecordset->IsOpen() || pRecordset->IsFieldNull(&index)))
{
int nIndex = 0;
DDX_LBIndex(pDX, nIDC, nIndex);
}
else
DDX_LBIndex(pDX, nIDC, index);
}
void AFXAPI DDX_FieldCBIndex(CDataExchange* pDX, int nIDC, int& index,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
if (!pDX->m_bSaveAndValidate &&
(!pRecordset->IsOpen() || pRecordset->IsFieldNull(&index)))
{
int nIndex = 0;
DDX_CBIndex(pDX, nIDC, nIndex);
}
else
DDX_CBIndex(pDX, nIDC, index);
}
void AFXAPI DDX_FieldScroll(CDataExchange* pDX, int nIDC, int& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
if (!pDX->m_bSaveAndValidate &&
(!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value)))
{
int nValue = 0;
DDX_Scroll(pDX, nIDC, nValue);
}
else
DDX_Scroll(pDX, nIDC, value);
}
void AFXAPI DDX_FieldSlider(CDataExchange* pDX, int nIDC, int& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
if (!pDX->m_bSaveAndValidate &&
(!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value)))
{
int nValue = 0;
DDX_Slider(pDX, nIDC, nValue);
}
else
DDX_Slider(pDX, nIDC, value);
}
/////////////////////////////////////////////////////////////////////////////
// Data exchange for special controls
void AFXAPI DDX_FieldCheck(CDataExchange* pDX, int nIDC, int& value, CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
value = (int)::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L);
ASSERT(value >= 0 && value <= 2);
if (value == 2)
{
if (pRecordset->IsFieldNullable(&value))
pRecordset->SetFieldNull(&value);
else
{
TRACE0("Warning: can't set field NULL for checkbox value.\n");
// Default to unchecked
value = 0;
}
}
}
else
{
if (!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value))
{
int style = ((int)::GetWindowLong(hWndCtrl, GWL_STYLE) & 0xf);
if ((style == BS_3STATE || style == BS_AUTO3STATE))
value = 2;
else
{
TRACE0("Warning: can't set checkbox value for NULL field.\n");
// Default to unchecked
value = 0;
}
}
if (value < 0 || value > 2)
{
value = 0; // default to off
TRACE1("Warning: dialog data checkbox value (%d) out of range.\n",
value);
}
::SendMessage(hWndCtrl, BM_SETCHECK, (WPARAM)value, 0L);
}
}
void AFXAPI DDX_FieldRadio(CDataExchange* pDX, int nIDC, int& value,
CDaoRecordset* pRecordset)
{
ASSERT_VALID(pRecordset);
if (!pDX->m_bSaveAndValidate &&
(!pRecordset->IsOpen() || pRecordset->IsFieldNull(&value)))
value = -1;
DDX_Radio(pDX, nIDC, value);
if (pDX->m_bSaveAndValidate)
{
if (value == -1 && !pRecordset->IsFieldNullable(&value))
{
AfxFailRadio(pDX);
}
else
{
pRecordset->SetFieldNull(&value, (value == -1));
}
}
}
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
void CDaoRecordView::AssertValid() const
{
CFormView::AssertValid();
}
void CDaoRecordView::Dump(CDumpContext& dc) const
{
ASSERT_VALID(this);
CFormView::Dump(dc);
dc << "m_nStatus =" << m_nStatus;
dc << "m_varBookmarkCurrent =" << m_varBookmarkCurrent;
dc << "m_varBookmarkFirst =" << m_varBookmarkFirst;
dc << "m_varBookmarkLast =" << m_varBookmarkLast;
dc << "\n";
}
#endif
//////////////////////////////////////////////////////////////////////////////
// Inline function declarations expanded out-of-line
#ifndef _AFX_ENABLE_INLINES
static char _szAfxDaoInl[] = "afxdao.inl";
#undef THIS_FILE
#define THIS_FILE _szAfxDaoInl
#define _AFXDAOVIEW_INLINE
#include "afxdao.inl"
#endif
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -