www.gusucode.com > ADO智能开发包C++源码程序 > ADO智能开发包/sfxdb_src_1.0.510.1/sfx/Source/db/src/dbStd.cpp
#include "stdafx.h" #include "dbstd.h" ////////////////////////////////////////////////////////////////////////// //CDbEdit IMPLEMENT_DYNAMIC(CDBEdit, CEdit) CDBEdit::CDBEdit() { m_pWnd = this; } CDBEdit::~CDBEdit() { } BEGIN_MESSAGE_MAP(CDBEdit, CEdit) //ON_WM_DESTROY() END_MESSAGE_MAP() LRESULT CDBEdit::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class CDBBaseControl::_WinMessage(message, wParam, lParam); return CEdit::WindowProc(message, wParam, lParam); } ////////////////////////////////////////////////////////////////////////// // IMPLEMENT_DYNAMIC(CDBStatic, CStatic) CDBStatic::CDBStatic() { m_pWnd = this; } BEGIN_MESSAGE_MAP(CDBStatic, CStatic) END_MESSAGE_MAP() // //void CDBStatic::virDataChange() //{ // TRACE(_T("----CDBStatic::virDataChange()\n")); // // try // { // SetWindowText(m_Field.GetValue()); // } // catch (_com_error &e) // { // adoShowComError(m_hWnd, e); // TRACE(_T("----CDBStatic::virDataChange()出现错误!\n")); // } //} LRESULT CDBStatic::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class CDBBaseControl::_WinMessage(message, wParam, lParam); return CStatic::WindowProc(message, wParam, lParam); } ////////////////////////////////////////////////////////////////////////// // IMPLEMENT_DYNAMIC(CDBComboBox, CComboBox) CDBComboBox::CDBComboBox() { m_pWnd = this; } BEGIN_MESSAGE_MAP(CDBComboBox, CComboBox) END_MESSAGE_MAP() //void CDBComboBox::virDataChange() //{ // try // { // SetWindowText(m_Field.GetValue()); // } // catch (_com_error &e) // { // adoShowComError(m_hWnd, e); // TRACE(_T("----CDBStatic::virDataChange()出现错误!\n")); // } //} #define _SFX_ID_LISTBOX 1000 #define _SFX_ID_EDIT 1001 LRESULT CDBComboBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (WM_COMMAND == message) { if (_SFX_ID_LISTBOX==LOWORD(wParam)) { if (1==HIWORD(wParam)) { m_pRecordSet->SetEditChange(true); } }else if(_SFX_ID_EDIT==LOWORD(wParam)) { if (EN_CHANGE==HIWORD(wParam)) { m_pRecordSet->SetEditChange(true); } } //return FALSE; } CDBBaseControl::_WinMessage(message, wParam, lParam); return CComboBox::WindowProc(message, wParam, lParam); } WNDPROC pOldEditProc = NULL; LRESULT Edit_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_KEYDOWN: case WM_CUT: case WM_PASTE: case WM_UNDO: case WM_KILLFOCUS: case WM_SETFOCUS: case WM_CHAR: PostMessage(GetParent(hWnd), message, 0, 0); break; } LRESULT hRel = ::CallWindowProc(pOldEditProc, hWnd, message, wParam, lParam); return hRel; } ////////////////////////////////////////////////////////////////////////// // IMPLEMENT_DYNAMIC(CDBCheckBox, CButton) BEGIN_MESSAGE_MAP(CDBCheckBox, CButton) ON_WM_LBUTTONUP() END_MESSAGE_MAP() CDBCheckBox::CDBCheckBox() { //m_ValueChecked = _T("True"); //m_ValueUnchecked = _T("False"); m_pWnd = this; } LRESULT CDBCheckBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { CDBBaseControl::_WinMessage(message, wParam, lParam); return CButton::WindowProc(message, wParam, lParam); } void CDBCheckBox::virDataChange() { ASSERT(NULL != m_pWnd); HWND hWndParent = ::GetParent(m_hWnd); int m_bValue; if (NULL != hWndParent) { if (ADO::adBoolean == m_Field.GetType()) { if (m_Field.GetValue(m_bValue)) { if (FALSE == m_bValue) { ::CheckDlgButton(hWndParent, GetWindowLong(m_hWnd, GWL_ID), BST_UNCHECKED); }else { ::CheckDlgButton(hWndParent, GetWindowLong(m_hWnd, GWL_ID), BST_CHECKED); } } }/*else { if (::IsDlgButtonChecked(hWndParent, ::GetWindowLong(m_hWnd, GWL_ID)) & BST_CHECKED) { SetWindowText(m_ValueChecked); }else { SetWindowText(m_ValueUnchecked); } }*/ } #ifdef _DEBUG else { TRACE(_T("----CDBCheckBox 没有父窗口,无法进行操作。\n")); } #endif } void CDBCheckBox::virDataWrite() { ASSERT(NULL != m_pWnd); HWND hWndParent = ::GetParent(m_hWnd); int m_bValue = -1; if (NULL != hWndParent) { if (m_pRecordSet->GetEditChange()) { if (ADO::adBoolean == m_Field.GetType()) { if (::IsDlgButtonChecked(hWndParent, ::GetWindowLong(m_hWnd, GWL_ID)) & BST_CHECKED) { m_bValue = TRUE; }else { m_bValue = FALSE; } m_Field.SetValue(m_bValue); } } } #ifdef _DEBUG else { TRACE(_T("----CDBCheckBox 没有父窗口,无法进行操作。\n")); } #endif } void CDBCheckBox::OnLButtonUp(UINT nFlags, CPoint point) { CButton::OnLButtonUp(nFlags, point); m_pRecordSet->SetEditChange(true); ///virDataWrite(); } ////////////////////////////////////////////////////////////////////////// // IMPLEMENT_DYNAMIC(CDBRichEdit, CRichEditCtrl) CDBRichEdit::CDBRichEdit() { m_pWnd = this; m_lpszData = NULL; m_FieldData.lpByte = NULL; m_FieldData.nSize = 0; } CDBRichEdit::~CDBRichEdit() { if (NULL != m_lpszData) { delete m_lpszData; } if (NULL != m_FieldData.lpByte) { delete []m_FieldData.lpByte; m_FieldData.lpByte = NULL; } } BEGIN_MESSAGE_MAP(CDBRichEdit, CRichEditCtrl) END_MESSAGE_MAP() static DWORD CALLBACK MyStreamWriteCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { CDBRichEdit *pRichEdit = (CDBRichEdit*)dwCookie; pRichEdit->GetAdoRecordset()->AppendChunk(pRichEdit->GetFieldName(), pbBuff, cb); *pcb = cb; return 0; } void CDBRichEdit::virDataWrite() { EDITSTREAM es; if (GetModify()) { CDBRichEdit *pRichEdit = this; es.dwCookie = (DWORD)pRichEdit; es.pfnCallback = (EDITSTREAMCALLBACK)MyStreamWriteCallback; StreamOut(SF_RTF, es); } } static DWORD CALLBACK MyStreamReadCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { CDBRichEdit::FIELDDATA *pFieldData = (CDBRichEdit::FIELDDATA*)dwCookie; if (pFieldData->nSize < cb) { *pcb = pFieldData->nSize; memcpy(pbBuff, (LPCSTR)pFieldData->lpByte, *pcb); } else { *pcb = cb; memcpy(pbBuff, (LPCSTR)pFieldData->lpByte, *pcb); pFieldData->lpByte += cb; } return 0; } void CDBRichEdit::virDataChange() { EDITSTREAM es; SetSel(0, -1); Clear(); m_FieldData.nSize = GetField()->GetActualSize(); if (NULL != m_FieldData.lpByte) { delete []m_FieldData.lpByte; m_FieldData.lpByte = NULL; } if (m_FieldData.nSize > 0) { m_FieldData.lpByte = new BYTE[m_FieldData.nSize ]; GetAdoRecordset()->GetChunk(GetFieldName(), m_FieldData.lpByte); es.dwCookie = (DWORD)&m_FieldData;//(DWORD)m_lpszData; es.pfnCallback = (EDITSTREAMCALLBACK)MyStreamReadCallback; StreamIn(SF_RTF, es); } } LRESULT CDBRichEdit::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_KEYDOWN://按键,判断pEP->wParam case WM_PASTE://粘贴 case WM_CUT://剪切 case EM_SETCHARFORMAT: { SetModify(TRUE); m_pRecordSet->SetEditChange(true); }; } return CRichEditCtrl::WindowProc(message, wParam, lParam); } //void CDBRichEdit::Clear() //{ // SetSel(0, -1); // ReplaceSel(""); // // EmptyUndoBuffer(); //} ////////////////////////////////////////////////////////////////////////// // IMPLEMENT_DYNAMIC(CDBMemo, CEdit) CDBMemo::CDBMemo() { m_pWnd = this; } BEGIN_MESSAGE_MAP(CDBMemo, CEdit) END_MESSAGE_MAP() LRESULT CDBMemo::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { CDBBaseControl::_WinMessage(message, wParam, lParam); return CEdit::WindowProc(message, wParam, lParam); } ////////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CDBDateTimeCtrl, CDateTimeCtrl) BEGIN_MESSAGE_MAP(CDBDateTimeCtrl, CDateTimeCtrl) ON_WM_KILLFOCUS() ON_WM_SETFOCUS() END_MESSAGE_MAP() CDBDateTimeCtrl::CDBDateTimeCtrl() { m_pWnd = this; } void CDBDateTimeCtrl::virDataChange() { ASSERT(NULL != m_pWnd); COleDateTime m_Time; if (ADO::adDate==m_Field.GetType()) { if (m_Field.GetValue(m_Time)) { SetTime(m_Time); } } } void CDBDateTimeCtrl::virDataWrite() { COleDateTime m_Time; GetTime(m_Time); m_Time.SetTime(0, 0, 0); m_Field.SetValue(m_Time); } LRESULT CDBDateTimeCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { CDBBaseControl::_WinMessage(message, wParam, lParam); return CDateTimeCtrl::WindowProc(message, wParam, lParam); } void CDBDateTimeCtrl::OnKillFocus(CWnd* pNewWnd) { CDateTimeCtrl::OnKillFocus(pNewWnd); // TODO: Add your message handler code here } void CDBDateTimeCtrl::OnSetFocus(CWnd* pOldWnd) { CDateTimeCtrl::OnSetFocus(pOldWnd); try { if (NULL != m_pRecordSet) { COleDateTime m_Time; COleDateTime m_FieldTime; m_Field.GetValue(m_FieldTime); GetTime(m_Time); m_Time.SetTime(0, 0, 0); if (m_Time!=m_FieldTime) { m_pRecordSet->SetEditChange(true); } } } catch (...) { } }