VC++の使い方

VC++の使い方 > リファレンス > GUIリファレンス > 外部リソースの読み取り
このページの内容
外部リソースを一気に読み取る
外部ダイアログの読み取り
ありがたいスポンサー様
All About ソフトウエアエンジニア
ネットで8%割引!自動車保険はアメリカンホーム・ダイレクト
人生の「チャンス」と「ピンチ」にモビット!
保険料が一生上がらない、保険料最大50%割引の一生涯の医療保険!

外部リソースを一気に読み取る

MSDN からのコピー。ロードしたあとに削除しなきゃいけないか。

関数 動作 リソースの削除方法
FormatMessage メッセージテーブルのエントリをロードし、フォーマットします。 操作は必要ありません。
LoadAccelerators アクセラレータテーブルをロードします。 DestroyAcceleratorTable
LoadBitmap ビットマップリソースをロードします。 DeleteObject
LoadCursor カーソルリソースをロードします。 DestroyCursor
LoadIcon アイコンリソースをロードします。 DestroyIcon
LoadMenu メニューリソースをロードします。 DestroyMenu
LoadString 文字列リソースをロードします。 操作は必要ありません。

外部ダイアログの読み取り

サンプルソースで茶を濁す。コマンドライン引数にリソースを保持する DLL や EXE 名を入力してね。

リソース名について

ソースでは 「#101」 で決め打ちしてます。適宜ソースを変更して実験してみてください。リソース名は ResourceHacker なんかでファイルを見てやれば番号を知ることができます。その番号に # をつけたものがリソース名になります。

EnumResourceNames 関数でもリストアップできます。

#include <windows.h>

BOOL CALLBACK DialogProc(HWND hDlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uiMsg)
	{
		case WM_INITDIALOG:
		{
			return TRUE;
		}

		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				case IDOK:
					EndDialog(hDlg, TRUE);
					return TRUE;
			}
			return FALSE;
	}

	return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInstPrev, LPSTR lpCmdLine, int intShowCmd)
{
	HMODULE hMod = LoadLibrary(lpCmdLine);

	HRSRC hResInfo = FindResource(hMod, "#101", RT_DIALOG);
	if(hResInfo == NULL) return 0;

	HGLOBAL hGlobal = LoadResource(hMod, hResInfo);
	LPDLGTEMPLATE lpDlgTmp = (LPDLGTEMPLATE)LockResource(hGlobal);
	if(lpDlgTmp == NULL) return 0;

	DWORD dwDlgTmpSize = SizeofResource(hMod, hResInfo);

	DialogBoxIndirect(hInstance, lpDlgTmp, NULL, DialogProc);

	GlobalFree(hGlobal);
	return 0;
}