0

我想使用 c++ 从资源中加载位图,但我不知道 hInstance 是什么或如何获取它。我读过这个,但它对我没有帮助。

4

1 回答 1

2

如果您使用的是 MFC(您没有使用 MFC 标记您的问题,但是...),您可以使用AfxGetInstanceHandle. 如果您没有使用 MFC - 即您有一个标准的 Winapi 实现),那么实例句柄将作为参数传递给您的WinMain函数。

为新的 Win32 Windows 应用程序创建样板代码会产生以下代码,您只需将其存储在hInstance方便的地方以备后用

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你的 exe 而不是 DLL,你也可以使用GetModuleHandle来获得同样的东西。

HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);

如果这还不够,还有GetWindowLong

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