Короче говоря, я хочу сделать функцию, которая встраивает визуальные стили манифеста и ссылки на ComCtl32.lib
, версия 6, если доступна. Вот в основном то, что я надеюсь сделать:
void InitVivify() {
// Embed visual style XML manifest
#pragma comment(linker, \
"\"/manifestdependency:type='Win32'" \
" name='Microsoft.Windows.Common-Controls'" \
" version='6.0.0.0'" \
" processorArchitecture='*'" \
" publicKeyToken='6595b64144ccf1df'" \
" language='*'\"" \
)
// Link common controls library
#pragma comment(lib, "ComCtl32.lib")
// Initialize controls used
INITCOMMONCONTROLSEX InitCtrlEx;
InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitCtrlEx.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES | ICC_USEREX_CLASSES;
InitCommonControlsEx(&InitCtrlEx);
}
Я понимаю, что это, вероятно, не очень хорошая практика, но так ли это?
Директивы Pragma — это директивы препроцессора.
Они заставляют реализацию вести себя определенным образом.
Так что это действительно, но не поощряется.
Стандарт C ++ 11:
16.6 Прагма директива [cpp.pragma]
1 Директива предварительной обработки вида
# pragma pp-tokensopt new-line
заставляет реализацию вести себя в зависимости от реализации. Такое поведение может привести к сбою перевода или к тому, что транслятор или получающаяся программа будут вести себя не соответствующим образом. Любая прагма, которая не распознается реализацией, игнорируется.
Других решений пока нет …