リソースから C++ を使用してビットマップをロードしたいのですが、hInstance とは何か、またはそれを取得する方法がわかりません。私はこれを読みましたが、役に立ちません。
質問する
2164 次
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 に答える