0

リソースから C++ を使用してビットマップをロードしたいのですが、hInstance とは何か、またはそれを取得する方法がわかりません。私はこれを読みましたが、役に立ちません。

4

1 に答える 1

2

MFC を使用している場合 (質問に MFC のタグを付けていませんが ...) を使用できますAfxGetInstanceHandle。MFC を使用していない場合 (つまり、標準の Winapi 実装を使用している場合)、インスタンス ハンドルが引数としてWinMain関数に渡されます。

hInstance新しいWin32 Windows アプリケーションのボイラープレート コードを作成すると、次のコードが生成されます。

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_WIN32PROJECT4, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT4));

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

それをしたくHINSTANCEなく、DLL ではなく exe が必要な場合は、 を使用GetModuleHandleして同じことを取得することもできます。

HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);

それだけでは不十分な場合もありますGetWindowLong

HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
于 2013-06-25T12:05:15.987 に答える