The ViewContext object serves 2 functions for Custom Displays:
void MyCustomDisplay_Init (XSI::CRef in_pViewCtx)
{
// cast the CRef into a ViewContext object
XSI::ViewContext l_vViewContext = in_pViewCtx;
// make sure it is valid
assert ( l_vViewContext.IsValid() );
// Get the parent window handle. We will use this to
// create our own child window.
HWND l_hParent = (HWND)l_vViewContext.GetParentWindowHandle();
// Create our window as a child of the XSI parent window
HWND l_hMyWindow = CreateDialog( MyDllInstance,
MAKEINTRESOURCE(IDD_MYCUSTOMWINDOW),
l_hParent,
(DLGPROC)MyWindowProc);
}
void MyCustomDisplay_Notify ( XSI::CRef in_pViewContext )
{
// cast the CRef into a ViewContext object
XSI::ViewContext l_vViewContext = in_pViewCtx;
// make sure it is valid
assert ( l_vViewContext.IsValid() );
XSI::siEventID in_eNotifcation;
void* in_pData;
l_vViewContext.GetNotificationData ( in_eNotifcation, &in_pData );
switch ( in_eNotifcation )
{
case siOnSelectionChange:
{
XSI::CSelectionChangeNotification* l_pSelection = (XSI::CSelectionChangeNotification*)in_pData;
XSI::CString l_szMessage;
l_szMessage = L"XSI_SELECTION_CHANGED_CV";
l_szMessage += L" [ ";
//
// Build a string of all objects that are in the selection list
//
for (INT c=0;c<l_pSelection->GetSelectionList().GetCount();c++)
{
XSI::CRef& l_pCRef = l_pSelection->GetSelectionList().GetItem(c);
XSI::SIObject mySIObject ( l_pCRef );
XSI::CString Name = mySIObject.GetFullName();
if ( c != 0 )
l_szMessage += L",";
l_szMessage += Name;;
}
l_szMessage += L" ]";
//
// And print it
//
char *l_szMessChar = new char [ l_szMessage.Length() + 1 ];
W2AHelper ( l_szMessChar, l_szMessage.GetWideString() );
OutputDebugString ( l_szMessChar );
delete [] l_szMessChar;
break;
}
case siOnTimeChange:
{
XSI::CTimeChangeNotification* l_pTimeChange = (XSI::CTimeChangeNotification*)in_pData;
XSI::CString l_szMessage;
l_szMessage = L"XSI_TIME_CHANGE_CV";
char *l_szMessChar = new char [ l_szMessage.Length() + 1 ];
DSW2AHelper ( l_szMessChar, l_szMessage.GetWideString() );
OutputDebugString ( l_szMessChar );
delete [] l_szMessChar;
break;
}
case siOnValueChange:
{
XSI::CString l_szMessage;
l_szMessage = L"XSI_SET_VALUE_CV ";
XSI::CValueChangeNotification* l_pData = (XSI::CValueChangeNotification*) in_pData;
XSI::CString l_csCIDName = l_pData->GetOwner().GetClassIDName();
l_szMessage += l_csCIDName;
l_szMessage += L" [ ";
l_szMessage += l_pData->GetComponentName();
l_szMessage += L" ]";
char *l_szMessChar = new char [ l_szMessage.Length() + 1 ];
DSW2AHelper ( l_szMessChar, l_szMessage.GetWideString() );
OutputDebugString ( l_szMessChar );
delete [] l_szMessChar;
break;
}
}
}
#include <xsi_viewcontext.h>

Public Member Functions |
|
| ViewContext () | |
| ~ViewContext () | |
| ViewContext (const CRef &in_ref) | |
| ViewContext (const ViewContext &in_obj) | |
| bool | IsA (siClassID in_ClassID) const |
| siClassID | GetClassID () const |
| ViewContext & | operator= (const ViewContext &in_obj) |
| ViewContext & | operator= (const CRef &in_ref) |
| CValue | GetUserData () |
| CStatus | PutUserData (const CValue &in_val) |
| void * | GetParentWindowHandle () |
| CStatus | GetNotificationData (siEventID &out_eEventID, void **out_pData) |
| CStatus | SetFlags (LONG in_lFlags) |
| CStatus | SetXWindowTopLevel (void *in_pHandle) |
| void * | GetTopLevelWidget () |
| ViewContext | ( | ) |
Default constructor.
| ~ViewContext | ( | ) |
Default destructor.
| ViewContext | ( | const CRef & | in_ref | ) |
Constructor.
| in_ref | constant reference object. |
| ViewContext | ( | const ViewContext & | in_obj | ) |
Copy constructor.
| in_obj | constant class object. |
| bool IsA | ( | siClassID | in_ClassID | ) | const [virtual] |
Returns true if a given class type is compatible with this API class.
| in_ClassID | class type. |
Reimplemented from CBase.
| siClassID GetClassID | ( | ) | const [virtual] |
| ViewContext& operator= | ( | const ViewContext & | in_obj | ) |
Creates an object from another object.
| in_obj | constant class object. |
| ViewContext& operator= | ( | const CRef & | in_ref | ) |
Creates an object from a reference object. The newly created object is set to empty if the input reference object is not compatible.
| in_ref | constant class object. |
Allows you to store a
CValue inside the context object. This is called User
Data because Softimage does not care about the content or
meaning of the data. This information is not persisted. A common
use for this feature is to store a pointer to a newly allocated C++
object during an Init callback, and then to use
Context::GetUserData
to retrieve the pointer when other callbacks are made. (In this
scenario the object should be destroyed in the cb_Plugin_Term Term
callback).
| in_val | user data to be set for the operator instance. |
| void* GetParentWindowHandle | ( | ) |
Returns the platform-specific parent window handle. For Windows, this must be cast to a HWND.
Returns the data associated with a notification event
| out_eEventID | the event that was fired |
| out_pData | the associated data |
| CStatus SetFlags | ( | LONG | in_lFlags | ) |
| CStatus SetXWindowTopLevel | ( | void * | in_pHandle | ) |
Specifies the top level X window for the Custom Display.
| in_pHandle | The pointer to the X Window handle |
| void* GetTopLevelWidget | ( | ) |
Returns the top level widget from Softimage. This is necessary in order to create your custom display as a child of this widget.