我想从资源中使用c ++加载位图,但我不知道hInstance是什么或者如何获取它。我看过this,但它对我没有帮助。
答案 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);