Одолженный и улучшенный ответ Marcus Downing . Протестированный и работы в Firefox 3 и Opera 9. Поддержки несколько строк, также.
ol {
counter-reset: item;
margin-left: 0;
padding-left: 0;
}
li {
display: block;
margin-left: 3.5em; /* Change with margin-left on li:before. Must be -li:before::margin-left + li:before::padding-right. (Causes indention for other lines.) */
}
li:before {
content: counter(item) ")"; /* Change 'item' to 'item, upper-roman' or 'item, lower-roman' for upper- and lower-case roman, respectively. */
counter-increment: item;
display: inline-block;
text-align: right;
width: 3em; /* Must be the maximum width of your list's numbers, including the ')', for compatability (in case you use a fixed-width font, for example). Will have to beef up if using roman. */
padding-right: 0.5em;
margin-left: -3.5em; /* See li comments. */
}
Спасибо за ответы. Ниже приводится то, что я придумал на основе ваших отзывов - очень признателен!
CString ToString(const GUID & guid)
{
// could use StringFromIID() - but that requires managing an OLE string
CString str;
str.Format(_T("%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X"),
guid.Data1,
guid.Data2,
guid.Data3,
guid.Data4[0],
guid.Data4[1],
guid.Data4[2],
guid.Data4[3],
guid.Data4[4],
guid.Data4[5],
guid.Data4[6],
guid.Data4[7]);
return str;
}
CString GetNameOf(REFIID riid)
{
CString name(ToString(riid));
try
{
// attempt to lookup the interface name from the registry
RegistryKey::OpenKey(HKEY_CLASSES_ROOT, "Interface", KEY_READ).OpenSubKey("{"+name+"}", KEY_READ).GetDefaultValue(name);
}
catch (...)
{
// use simple string representation if no registry entry found
}
return name;
}
Вы можете найти предопределенные интерфейсы в поддереве реестра HKCR \ Interface. Любой компонент может при желании зарегистрировать там свои интерфейсы. Однако это не обязательно - компонент может пропустить эту регистрацию.