0

ウィンドウに単純なハイパーリンクを配置しようとしています。

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 で試したことはありません。

ここで何が問題なのですか?

4

1 に答える 1

2

あなたが考え出したように、追加

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

問題を解決する 1 つの方法です。

SysLink コントロールは、Common Controls バージョン 6 でのみ追加されました。下位互換性の理由から、Common Controls 6 はデフォルトでは有効になっていません。マニフェストを作成してオプトインする必要があります。

マニフェストは、個別のファイル ( という名前program.exe.manifest) または特定のリソース ID を持つリソースとして存在できます。この#pragma行は、Microsoft のリンカーに 2 つ目のリンカーを生成するように指示します。いずれかのフォームを独自に作成することもできます。方法は次のとおりです。

于 2015-10-14T12:27:56.633 に答える