Assurez-vous que vous avez vraiment besoin de liaison dynamique de colonnes. Vous devrez parce que:
Pour implémenter la liaison dynamique de colonnes:
statique ATLCOLUMNINFO * _GetColumnInfo (void * pThis, ULONG * pcCols)
L'exemple suivant montre une fonction de _GetColumnInfo.
/ / Vérifier l'indicateur de la propriété pour les signets, si il est défini, la valeur zéro
/ / entrée ordinale dans la colonne de carte avec les informations de signet.
CAgentRowset * pRowset = (CAgentRowset **) pThis ;
CComQIPtrlt ; IRowsetInfo, & IID_IRowsetInfo > spRowsetProps = pRowset ;
CDBPropIDSet set(DBPROPSET_ROWSET) ;
ensemble.AddPropertyID(DBPROP_BOOKMARKS) ;
DBPROPSET * pPropSet = NULL ;
ULONG ulPropSet = 0 ;
HRESULT hr ;
Si (spRowsetProps)
HR = spRowsetProps - > GetProperties (1, ensemble, ulPropSet, & pPropSet) ;
Si (pPropSet)
{
CComVariant var = pPropSet - > rgProperties [0] .vvalue ;
CoTaskMemFree (pPropSet - > rgProperties) ;
CoTaskMemFree(pPropSet) ;
Si (SUCCEEDED(hr) & & (var.boolVal == valeur VARIANT_TRUE))
{
ADD_COLUMN_ENTRY_EX (ulCols, OLESTR("Bookmark"), 0, sizeof(DWORD), DBTYPE_BYTES, 0, 0, GUID_NULL, CAgentMan, dwBookmark, DBCOLUMNFLAGS_ISBOOKMARK)
ulCols ++ ;
}
}
/ / Ensuite configurer les autres colonnes.
ADD_COLUMN_ENTRY (ulCols, OLESTR("Command"), 1, 256, DBTYPE_STR, 0xFF, 0xFF, GUID_NULL, CAgentMan, szCommand)
ulCols ++ ;
ADD_COLUMN_ENTRY (ulCols, OLESTR("Text"), 2, 256, DBTYPE_STR, 0xFF, 0xFF, GUID_NULL, CAgentMan, szText)
ulCols ++ ;
ADD_COLUMN_ENTRY (ulCols, OLESTR("Command2"), 3, 256, DBTYPE_STR, 0xFF, 0xFF, GUID_NULL, CAgentMan, szCommand2)
ulCols ++ ;
ADD_COLUMN_ENTRY (ulCols, OLESTR("Text2"), 4, 256, DBTYPE_STR, 0xFF, 0xFF, GUID_NULL, CAgentMan, szText2)
ulCols ++ ;
Si (pcCols! = NULL)
* pcCols = ulCols ;
Return _rgColumns ;
}