InitCommonControlsEx () завершается ошибкой с ICC_LINK_CLASS в Windows 8.1

Я пытаюсь поместить простую гиперссылку на мое окно.

INITCOMMONCONTROLSEX iccx;
iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
iccx.dwICC  = ICC_LINK_CLASS;   // CommCtrl.h: #define ICC_LINK_CLASS 0x00008000
bool bResult = InitCommonControlsEx(&iccx); // bResult is false.
DWORD dwError = GetLastError(); // dwError is 0.

hWnd = CreateWindowExW( /*_In_      DWORD*/     0,
/*_In_opt_  LPCTSTR*/   WC_LINK, // CommCtrl.h: #define WC_LINK L"SysLink"/*_In_opt_  LPCTSTR*/   L"Hello World",
/*_In_      DWORD*/     WS_VISIBLE | WS_CHILD | WS_TABSTOP,
/*_In_      int*/       50,
/*_In_      int*/       200,
/*_In_      int*/       100,
/*_In_      int*/       20,
/*_In_opt_  HWND*/      hWndParent,
/*_In_opt_  HMENU*/     NULL,
/*_In_opt_  HINSTANCE*/ hInstance,
/*_In_opt_  LPVOID*/    NULL);
DWORD dwError = GetLastError(); // hWnd is NULL and dwError is 1407.

Код ошибки 1407 объясняется в Вот следующее.

ERROR_CANNOT_FIND_WND_CLASS
1407 (0x57F)
Cannot find window class.

Я использую Windows 8.1 Pro x64, и я никогда не пробовал этот код в любой другой версии Windows.

В чем здесь проблема?

0

Решение

Как вы уже поняли, добавив

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

это один из способов решения проблемы.

Элемент управления SysLink был добавлен только в Common Controls версии 6. Для причины обратной совместимости, Общие элементы управления 6 по умолчанию НЕ включены. Вы должны включить его, создав манифест.

Манифест может существовать как отдельный файл (с именем program.exe.manifest) или как ресурс с определенным идентификатором ресурса. #pragma Линия говорит компоновщику Microsoft сгенерировать второй для вас. Вы также можете создать любую форму самостоятельно. Вот как.

2

Другие решения

Других решений пока нет …