Article ID: 122273
Article Last Modified on 8/16/2005
struct AFX_DDPDATA : public CObject
{
AFX_DDPDATA(LPVOID lpHandler, int nCtrlId, LPVOID lpMember,
UINT nType, LPCTSTR lpszOleName);
LPVOID m_lpHandler;
int m_nCtrlId;
LPVOID m_lpMember;
UINT m_nType;
LPCTSTR m_lpszOleName;
};
AFX_DDPDATA::AFX_DDPDATA(LPVOID lpHandler, int nCtrlId,
LPVOID lpMember, UINT nType, LPCTSTR lpszOleName ) :
m_lpHandler(lpHandler),
m_nCtrlId(nCtrlId),
m_lpMember(lpMember),
m_nType(nType),
m_lpszOleName(lpszOleName)
{
}
void AFXAPI DDP_PostProcessingEx(CDataExchange*pDX)
{
if ( pDX->m_bSaveAndValidate )
{
WORD wKey;
CMapWordToOb &m_DDPmap =((COlePropertyPage*)pDX->m_pDlgWnd)->
m_DDPmap;
AFX_DDPDATA *pDDP = NULL;
POSITION pos = m_DDPmap.GetStartPosition();
while( pos )
{
m_DDPmap.GetNextAssoc( pos, wKey, (CObject *&)pDDP);
TRY
{
switch( pDDP->m_nType )
{
case VT_I1:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
char *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(char *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_UI1:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
BYTE *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(BYTE *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_I2:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
short *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(short *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_UI2:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
WORD *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(WORD *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_I4:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
long *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(long *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_UI4:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
DWORD *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(DWORD *)pDDP->m_lpMember, pDDP->m_lpszOleName);
break;
}
case VT_R4:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
float *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX, pDDP->m_nCtrlId,
(float *)pDDP->m_lpMember,pDDP->m_lpszOleName);
break;
}
case VT_R8:
{
typedef void (AFXAPI *PFV)(CDataExchange *, int,
double *, LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX,pDDP->m_nCtrlId,
(double *)pDDP->m_lpMember,pDDP->m_lpszOleName);
break;
}
case VT_BSTR:
{
typedef void (AFXAPI *PFV)(CDataExchange *,int,
CString *,LPCTSTR );
(*(PFV)pDDP->m_lpHandler)(pDX,pDDP->m_nCtrlId,
(CString*)pDDP->m_lpMember,pDDP->m_lpszOleName);
break;
}
default:
// Unknown Data Type!
ASSERT(FALSE);
break;
}
}
CATCH(COleDispatchException, e)
{
// display a message box describing caught exception
HWND hWndActive = ::GetActiveWindow();
char szTitle[255];
::GetWindowText(hWndActive, szTitle, sizeof(szTitle));
::MessageBox(hWndActive, (LPCSTR)e->m_strDescription,
szTitle, MB_ICONEXCLAMATION|MB_TASKMODAL|MB_OK);
}
AND_CATCH_ALL(e)
{
// Ignore all other exceptions
}
END_CATCH_ALL
delete pDDP;
}
m_DDPmap.RemoveAll();
}
}
Keywords: kbprogramming kbprb kbctrl kbcode KB122273