Article ID: 199516
Article Last Modified on 11/21/2006
class CCirc3Ctrl : public COleControl
{
...
public:
void SetStockPropMask(DWORD dwStockPropMask);
DWORD GetStockPropMask();
...
}
// MANUAL CONTROL OF MAKING Caption PERSISTANT.
// To test the initialization of the caption stock property
// replace the circle3 samples DoPropExchange function with the
// following version.
// These #defines can be found in the Ctlprop.cpp file and are given
// here to remove the need to continually track them down. In the
// code, only STOCKPROP_CAPTION is used.
#define STOCKPROP_BACKCOLOR 0x00000001
#define STOCKPROP_CAPTION 0x00000002
#define STOCKPROP_FONT 0x00000004
#define STOCKPROP_FORECOLOR 0x00000008
#define STOCKPROP_TEXT 0x00000010
#define STOCKPROP_BORDERSTYLE 0x00000020
#define STOCKPROP_ENABLED 0x00000040
//**************************************************************
#define STOCKPROP_APPEARANCE 0x00000080 // New in VC 5.0
//**************************************************************
// Helper method for setting the Stock property mask.
void CCirc3Ctrl::SetStockPropMask(DWORD dwStockPropMask)
{
#if _MFC_VER >= 0x0420 // MFC version >= v4.2
*GetDispatchMap()->lpStockPropMask = dwStockPropMask;
#else // MFC version < v4.2
m_dwStockPropMask = dwStockPropMask;
#endif
}
// Helper method to Get the Stock property mask.
DWORD CCirc3Ctrl::GetStockPropMask()
{
#if _MFC_VER >= 0x0420 // MFC version >= v4.2
return COleControl::GetStockPropMask();
#else // MFC version < v4.2
return m_dwStockPropMask;
#endif
}
void CCirc3Ctrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
// Need to comment out the following line since it will be <BR/>
// called later.
// COleControl::DoPropExchange(pPX);
// Handle Property Exchange of the Stock Property Caption ourselves.
BOOL bLoading = pPX->IsLoading();
CString strText;
if (!bLoading)
strText = InternalGetText();
PX_String(pPX,_T("Caption"),strText,_T("Caption"));
if (bLoading) {
TRY
SetText(strText);
END_TRY
}
// Bypass MFC's Property Exchange of the Stock Property Caption.
DWORD dwStockPropMask = GetStockPropMask();
DWORD tempMask = dwStockPropMask;
// Remove all stock property flags we are handling from tempMask.
tempMask &= ~STOCKPROP_CAPTION;
SetStockPropMask(tempMask);
// Let MFC handle any stock properties that we aren't.
COleControl::DoPropExchange(pPX);
// Reset the Stock Property Mask.
SetStockPropMask(dwStockPropMask);
if (pPX->GetVersion() == (DWORD)MAKELONG(_wVerMinor, _wVerMajor))
{
PX_Bool(pPX, _T("CircleShape"), m_circleShape, TRUE);
PX_Short(pPX, _T("CircleOffset"), m_circleOffset, 0);
PX_Long(pPX, _T("FlashColor"), (long &)m_flashColor,
RGB(0xFF, 0x00, 0x00));
PX_String(pPX, _T("Note"), m_note, _T(""));
}
else if (pPX->IsLoading())
{
// Skip over persistent data.
BOOL bDummy;
short sDummy;
long lDummy;
CString strDummy;
PX_Bool(pPX, _T("CircleShape"), bDummy, FALSE);
PX_Short(pPX, _T("CircleOffset"), sDummy, 0);
PX_Long(pPX, _T("FlashColor"), lDummy, 0);
PX_String(pPX, _T("Note"), strDummy, _T(""));
// Force property values to these defaults.
m_circleShape = TRUE;
m_circleOffset = 0;
m_flashColor = RGB(0xFF, 0x00, 0x00);
m_note = _T("");
}
}
Additional query words: 3.0 3.1 3.2 3.00 3.10 3.20 4.2 4.2b 5.0 cdk ole activex ocx initialize mfc
Keywords: kbctrl kbhowto KB199516