Я пытаюсь поместить простую гиперссылку на мое окно.
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.
В чем здесь проблема?
Как вы уже поняли, добавив
#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 сгенерировать второй для вас. Вы также можете создать любую форму самостоятельно. Вот как.
Других решений пока нет …