This isn't really my area, but it would seem like you could do the following:
BSIColorDescr* fgColor = nullptr; if (SUCCESS == mdlListCell_getIconColorOverrides(pCell, &fgColor, nullptr) && (nullptr != fgColor)) // <- I suspect this probably comes back with nullptr though... { RgbColorDef rgb; rgb.red = 0x7f; rgb.green = 0x7f; rgb.blue = 0; mdlColorDescr_setByRgb(fgColor, &rgb, 0); }
Use the method below from DgnColorMap to get the element color information...
//! Get the color information from the supplied element color id.
//! @param[out] colorDef IntColorDef for the supplied element color, can be used to get TBGR or RGB color values.
//! @param[out] colorIndex The 0 to INDEX_Background index into the file's DgnColorMap. For rgb and book colors this is the closest match from when they were created.
//! @param[out] isTrueColor True if supplied element color is a rgb or book color, false for color index.
//! @param[out] bookName Color book name for the supplied element color (empty string for rgb and indexed colors).
//! @param[out] colorName Color name from color book for the supplied element color (empty string for rgb and indexed colors).
//! @param[in] elementColor The element color to extract the information for.
//! @param[in] dgnFile The file for the supplied element color.
//! @return SUCCESS if element color is a valid rgb, book, or DgnColorMap index.
//! COLOR_BYLEVEL or COLOR_BYCELL will return ERROR.
static DGNPLATFORM_EXPORT StatusInt ExtractElementColorInfo (IntColorDef* colorDef, UInt32* colorIndex, bool* isTrueColor, WStringP bookName, WStringP colorName, UInt32 elementColor, DgnFileR dgnFile);
Worst case scenario, include these locally (I don't think you'll need to call destroy, the list cell should take care of that).
MSCORE_EXPORT int mdlColorDescr_create (BSIColorDescr **newDescrPP);
MSCORE_EXPORT int mdlColorDescr_destroy (BSIColorDescr **colorDescrPP);
HTH