如何从资源获取HINSTANCE到LoadBitmap

时间:2013-06-25 10:16:20

标签: visual-c++ visual-studio-2008

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

1 个答案:

答案 0 :(得分:1)

如果您使用的是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;
}

如果你不想这样做,并且你想要你的exe的HINSTANCE而不是DLL,你也可以使用GetModuleHandle来获得相同的东西。

HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);

如果这还不够,还有GetWindowLong

HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);