bool PropertyDataUpdater::BuildPropGridCtrl( CMFCPropertyGridCtrl* pPropDataList, const CString& type, const AcStringArray& fields ) { if( pPropDataList == NULL ) return false; if( type.GetLength() == 0 ) return false; if( fields.isEmpty() ) return false; // 清空已添加的属性 pPropDataList->RemoveAll(); //acutPrintf(_T("\n清空所有属性...")); // 创建MFCPropertyGridCtrlHelper对象 // 同时初始化m_propertyDataList的属性 // 参见MFCPropertyGridCtrlHelper的构造函数 MFCPropertyGridCtrlHelper pgch( pPropDataList ); int len = fields.length(); for( int i = 0; i < len; i++ ) { CString name = fields[i].kACharPtr(); FieldInfo info; // 默认设置(DT_STRING, m_enable=true, m_descr =_T("")) FieldInfoHelper::ReadFieldInfo( type, name, info ); // 构建PropertyList BuildPropList( pgch, name, _T( "" ), info ); // 赋予空字符串 } //PrintPropList(pPropDataList); return true; }
void CPoseController::Think( void ) { if ( !m_bDisablePropLookup ) { // Refresh the list of models BuildPropList(); SetCurrentPose( m_fPoseValue ); m_bDisablePropLookup = true; SetNextThink( gpGlobals->curtime + 1.0 ); } }
void CPoseController::SetPropName( const char *pName ) { m_iszPropName = MAKE_STRING( pName ); BuildPropList(); }
void BreakModelList( CUtlVector<breakmodel_t> &list, int modelindex, float defBurstScale, int defCollisionGroup ) { BuildPropList( "break", list, modelindex, defBurstScale, defCollisionGroup ); }
///////////////////////////////////////////////////////////////////////////// //++ // // CBasePropertyPage::BSetPrivateProps // // Routine Description: // Set the private properties for this object. // // Arguments: // bValidateOnly [IN] TRUE = only validate the data. // // Return Value: // ERROR_SUCCESS The operation was completed successfully. // !0 Failure. // //-- ///////////////////////////////////////////////////////////////////////////// BOOL CBasePropertyPage::BSetPrivateProps(IN BOOL bValidateOnly) { BOOL bSuccess = TRUE; CClusPropList cpl(BWizard() /*bAlwaysAddProp*/); CWaitCursor wc; ASSERT(Peo() != NULL); // Build the property list. try { BuildPropList(cpl); } // try catch (CException * pe) { pe->ReportError(); pe->Delete(); bSuccess = FALSE; } // catch: CException // Set the data. if (bSuccess) { if ((cpl.PbProplist() != NULL) && (cpl.CbProplist() > 0)) { DWORD dwStatus; DWORD dwControlCode; DWORD cbProps; switch (Cot()) { case CLUADMEX_OT_NODE: ASSERT(Peo()->PndNodeData() != NULL); ASSERT(Peo()->PndNodeData()->m_hnode != NULL); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_NODE_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_NODE_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterNodeControl( Peo()->PndNodeData()->m_hnode, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; case CLUADMEX_OT_GROUP: ASSERT(Peo()->PgdGroupData() != NULL); ASSERT(Peo()->PgdGroupData()->m_hgroup != NULL); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_GROUP_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_GROUP_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterGroupControl( Peo()->PgdGroupData()->m_hgroup, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; case CLUADMEX_OT_RESOURCE: ASSERT(Peo()->PrdResData() != NULL); ASSERT(Peo()->PrdResData()->m_hresource != NULL); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterResourceControl( Peo()->PrdResData()->m_hresource, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; case CLUADMEX_OT_RESOURCETYPE: ASSERT(Peo()->PodObjData() != NULL); ASSERT(Peo()->PodObjData()->m_strName.GetLength() > 0); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterResourceTypeControl( Hcluster(), Peo()->PodObjData()->m_strName, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; case CLUADMEX_OT_NETWORK: ASSERT(Peo()->PndNetworkData() != NULL); ASSERT(Peo()->PndNetworkData()->m_hnetwork != NULL); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_NETWORK_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_NETWORK_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterNetworkControl( Peo()->PndNetworkData()->m_hnetwork, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; case CLUADMEX_OT_NETINTERFACE: ASSERT(Peo()->PndNetInterfaceData() != NULL); ASSERT(Peo()->PndNetInterfaceData()->m_hnetinterface != NULL); // Determine which control code to use. if (bValidateOnly) dwControlCode = CLUSCTL_NETINTERFACE_VALIDATE_PRIVATE_PROPERTIES; else dwControlCode = CLUSCTL_NETINTERFACE_SET_PRIVATE_PROPERTIES; // Set private properties. dwStatus = ClusterNetInterfaceControl( Peo()->PndNetInterfaceData()->m_hnetinterface, NULL, // hNode dwControlCode, cpl.PbProplist(), cpl.CbProplist(), NULL, // lpOutBuffer 0, // nOutBufferSize &cbProps ); break; default: ASSERT(0); } // switch: object type // Handle errors. if (dwStatus != ERROR_SUCCESS) { CString strMsg; FormatError(strMsg, dwStatus); AfxMessageBox(strMsg); if (bValidateOnly || (dwStatus != ERROR_RESOURCE_PROPERTIES_STORED)) bSuccess = FALSE; } // if: error setting/validating data } // if: there is data to set } // if: no errors building the property list // Save data locally. if (!bValidateOnly && bSuccess) { // Save new values as previous values. try { DWORD cprop; const CObjectProperty * pprop; for (pprop = Pprops(), cprop = Cprops() ; cprop > 0 ; pprop++, cprop--) { switch (pprop->m_propFormat) { case CLUSPROP_FORMAT_SZ: case CLUSPROP_FORMAT_EXPAND_SZ: ASSERT(pprop->m_value.pstr != NULL); ASSERT(pprop->m_valuePrev.pstr != NULL); *pprop->m_valuePrev.pstr = *pprop->m_value.pstr; break; case CLUSPROP_FORMAT_DWORD: ASSERT(pprop->m_value.pdw != NULL); ASSERT(pprop->m_valuePrev.pdw != NULL); *pprop->m_valuePrev.pdw = *pprop->m_value.pdw; break; case CLUSPROP_FORMAT_BINARY: case CLUSPROP_FORMAT_MULTI_SZ: ASSERT(pprop->m_value.ppb != NULL); ASSERT(*pprop->m_value.ppb != NULL); ASSERT(pprop->m_value.pcb != NULL); ASSERT(pprop->m_valuePrev.ppb != NULL); ASSERT(*pprop->m_valuePrev.ppb != NULL); ASSERT(pprop->m_valuePrev.pcb != NULL); delete [] *pprop->m_valuePrev.ppb; *pprop->m_valuePrev.ppb = new BYTE[*pprop->m_value.pcb]; CopyMemory(*pprop->m_valuePrev.ppb, *pprop->m_value.ppb, *pprop->m_value.pcb); *pprop->m_valuePrev.pcb = *pprop->m_value.pcb; break; default: ASSERT(0); // don't know how to deal with this type } // switch: property format } // for: each property } // try catch (CException * pe) { pe->ReportError(); pe->Delete(); bSuccess = FALSE; } // catch: CException } // if: not just validating and successful so far return bSuccess; } //*** CBasePropertyPage::BSetPrivateProps()