How to determine whether an ActiveX ambient property is implemented (201879)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ .NET (2002)
- Microsoft Visual C++ .NET (2003)
This article was previously published under Q201879 Note Microsoft Visual C++ .NET (2002) and Microsoft Visual C++ .NET
(2003) support both the managed code model that is provided by the .NET
Framework and the unmanaged native Windows code model. The information in this
article applies to unmanaged Visual C++ code only. SUMMARY There may be situations where you want to use the ambient
property values when they exist and your own values when the ambient property
values don't exist. For example, when the AmbientBackColor isn't implemented,
you may want to use the StockBackColor instead of the System Back Color. By
design, this can not be accomplished with the COleControl::Ambient... methods.
MORE INFORMATION The following methods can be added to your derived
COleControl class to provide greater flexibility in using ambient properties
than provided by the default class methods. The methods have the following
format:
bool Ambient...([in/out]type* name, [in]bool bInit = false);
The return value is true if the ActiveX container implements
the ambient property and false for all other cases. The name parameter is the
address of a variable that is to be initialized with the ambient property. For
AmbientFont, pDisp must be a pointer initialized to NULL; otherwise, it must
point to a valid variable. Setting bInit to true causes the variable to be
initialized to the default value as determined by MFC if the ambient property
isn't implemented.
//*****************************************************
// Method definitions for your control's .h file.
//*****************************************************
bool AmbientAppearance(short* pAppearance, bool bInit = false);
bool AmbientBackColor(OLE_COLOR* pBackColor, bool bInit = false);
bool AmbientDisplayName(CString* pDisplayName, bool bInit = false);
bool AmbientFont(LPFONTDISP pDisp, bool bInit = false);
bool AmbientForeColor(OLE_COLOR* pForeColor, bool bInit = false);
bool AmbientLocaleID(LCID* plcid, bool bInit = false);
bool AmbientScaleUnits(CString* pStrScaleUnits, bool bInit = false);
bool AmbientTextAlign(short* pITextAlign, bool bInit = false);
bool AmbientUserMode(BOOL* pbUserMode, bool bInit = false);
bool AmbientUIDead(BOOL* pbUIDead, bool bInit = false);
bool AmbientShowGrabHandles(BOOL* pbShowGrab, bool bInit = false);
bool AmbientShowHatching(BOOL* pbShowHatch, bool bInit = false);
//*****************************************************
// Method implementations for your control's .cpp file.
//*****************************************************
//***** AmbientAppearance *****
bool CMyOleControl::AmbientAppearance(short* pAppearance,
bool bInit)
{
ASSERT (pAppearance);
if (!GetAmbientProperty(DISPID_AMBIENT_APPEARANCE,
VT_I2,
pAppearance)) {
if (bInit) *pAppearance = 0;
return false;
}else{
return true;
}
}
//***** AmbientBackColor *****
bool CMyOleControl::AmbientBackColor(OLE_COLOR* pBackColor,
bool bInit)
{
ASSERT (pBackColor);
if (!GetAmbientProperty(DISPID_AMBIENT_BACKCOLOR,
VT_I4,
pBackColor)) {
if (bInit) *pBackColor = GetSysColor(COLOR_WINDOW);
return false;
}else{
return true;
}
}
//***** AmbientDisplayName *****
bool CMyOleControl::AmbientDisplayName(CString* pDisplayName,
bool bInit)
{
ASSERT (pDisplayName);
if (!GetAmbientProperty(DISPID_AMBIENT_DISPLAYNAME,
VT_BSTR,
pDisplayName)) {
if (bInit) *pDisplayName = "CMyOleControl";
return false;
}else
return true;
}
//***** AmbientFont *****
bool CMyOleControl::AmbientFont(LPFONTDISP pDisp,
bool bInit)
{
// pDisp must be NULL.
ASSERT (!pDisp);
// Note: Caller MUST Release the font!
if (!GetAmbientProperty(DISPID_AMBIENT_FONT,
VT_DISPATCH,
&pDisp)) {
if (bInit) pDisp = NULL;
return false;
}else{
return true;
}
}
//***** AmbientForeColor *****
bool CMyOleControl::AmbientForeColor(OLE_COLOR* pForeColor,
bool bInit)
{
ASSERT (pForeColor);
if (!GetAmbientProperty(DISPID_AMBIENT_FORECOLOR,
VT_I4,
pForeColor)) {
if (bInit) *pForeColor = GetSysColor(COLOR_WINDOWTEXT);
return false;
}else{
return true;
}
}
//***** AmbientLocaleID *****
bool CMyOleControl::AmbientLocaleID(LCID* plcid, bool bInit)
{
ASSERT (plcid);
if (!GetAmbientProperty(DISPID_AMBIENT_LOCALEID,
VT_I4,
plcid)) {
if (bInit) *plcid = 0;
return false;
}else{
return true;
}
}
//***** AmbientScaleUnits *****
bool CMyOleControl::AmbientScaleUnits(CString* pStrScaleUnits,
bool bInit)
{
ASSERT (pStrScaleUnits);
if (!GetAmbientProperty(DISPID_AMBIENT_SCALEUNITS,
VT_BSTR,
pStrScaleUnits)) {
if (bInit) *pStrScaleUnits = "";
return false;
}else{
return true;
}
}
//***** AmbientTextAlign *****
bool CMyOleControl::AmbientTextAlign(short* piTextAlign, bool bInit)
{
ASSERT (piTextAlign);
if (!GetAmbientProperty(DISPID_AMBIENT_TEXTALIGN,
VT_I2,
piTextAlign)) {
if (bInit) *piTextAlign = 0;
return false;
}else{
return true;
}
}
//***** AmbientUserMode *****
bool CMyOleControl::AmbientUserMode(BOOL* pbUserMode, bool bInit)
{
ASSERT(pbUserMode);
if (!GetAmbientProperty(DISPID_AMBIENT_USERMODE,
VT_BOOL,
pbUserMode)) {
if (bInit) *pbUserMode = TRUE;
return false;
}else{
return true;
}
}
//***** AmbientUIDead *****
bool MyOleControl::AmbientUIDead(BOOL* pbUIDead, bool bInit)
{
ASSERT(pbUIDead);
if (!GetAmbientProperty(DISPID_AMBIENT_UIDEAD,
VT_BOOL,
pbUIDead)) {
if (bInit) *pbUIDead = FALSE;
return false;
}else{
return true;
}
}
//***** AmbientShowGrabHandles *****
bool CMyOleControl::AmbientShowGrabHandles(BOOL* pbShowGrab, bool bInit)
{
ASSERT(pbShowGrab);
if (!GetAmbientProperty(DISPID_AMBIENT_SHOWGRABHANDLES,
VT_BOOL,
pbShowGrab)) {
if (bInit) *pbShowGrab = TRUE;
return false;
}else{
return true;
}
}
//***** AmbientShowHatching *****
bool CMyOleControl::AmbientShowHatching(BOOL* pbShowHatch, bool bInit)
{
ASSERT(pbShowHatch);
if (!GetAmbientProperty(DISPID_AMBIENT_SHOWHATCHING,
VT_BOOL,
pbShowHatch)) {
if (bInit) *pbShowHatch = TRUE;
return false;
}else{
return true;
}
}
REFERENCES (c) Microsoft Corporation 1999, All Rights Reserved.
Contributions by Shawn W. Karr, Microsoft Corporation.
Modification Type: | Major | Last Reviewed: | 4/28/2005 |
---|
Keywords: | kbContainer kbCtrl kbhowto KB201879 kbAudDeveloper |
---|
|