Win32APIで
BMP画像ファイル読み込みがわからなくて困っている人がいたので

参考までにソースあげ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
関数の中身を見るよろし
ちなみにWin32APIの関数は文字コード関係がうるさいので
初心者は

プロジェクト→[プロジェクト名]のプロパティ→構成プロパティ→全般
の文字セットの項目をUnicodeからマルチバイト文字に変更するとよいかも
適当な画像、test.bmpを読み込んで表示する
 
 // template.cpp
 
 #define BMPFILE TEXT("test.bmp")
 
 #include <windows.h>
 
 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 ATOM InitApp(HINSTANCE);
 BOOL InitInstance(HINSTANCE, int);
 
 TCHAR szClassName[] = TEXT("template");	//ウィンドウクラス
 
 
 #pragma region InitWindow
 
 int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
 				   LPSTR lpsCmdLine, int nCmdShow)
 {
 	MSG msg;
 	BOOL bRet;
 	
 	if (!InitApp(hCurInst))
 		return FALSE;
 	if (!InitInstance(hCurInst, nCmdShow)) 
 		return FALSE;
 	while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
 		if (bRet == -1) {
 			break;
 		} else {
 			TranslateMessage(&msg);
 			DispatchMessage(&msg);
 		}
 	}
 	return (int)msg.wParam;
 }
 
 //ウィンドウ・クラスの登録
 
 ATOM InitApp(HINSTANCE hInst)
 {
 	WNDCLASSEX wc;
 	wc.cbSize = sizeof(WNDCLASSEX);
 	wc.style = CS_HREDRAW | CS_VREDRAW;
 	wc.lpfnWndProc = WndProc;	//プロシージャ名
 	wc.cbClsExtra = 0;
 	wc.cbWndExtra = 0;
 	wc.hInstance = hInst;//インスタンス
 	wc.hIcon = (HICON)LoadImage(NULL,
 		MAKEINTRESOURCE(IDI_APPLICATION),
 		IMAGE_ICON,
 		0,
 		0,
 		LR_DEFAULTSIZE | LR_SHARED);
 	wc.hCursor = (HCURSOR)LoadImage(NULL,
 		MAKEINTRESOURCE(IDC_ARROW),
 		IMAGE_CURSOR,
 		0,
 		0,
 		LR_DEFAULTSIZE | LR_SHARED);
 	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 	wc.lpszMenuName = NULL;	//メニュー名
 	wc.lpszClassName = (LPCTSTR)szClassName;
 	wc.hIconSm = (HICON)LoadImage(NULL,
 		MAKEINTRESOURCE(IDI_APPLICATION),
 		IMAGE_ICON,
 		0,
 		0,
 		LR_DEFAULTSIZE | LR_SHARED);
 
 	return (RegisterClassEx(&wc));
 }
 
 //ウィンドウの生成
 
 BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
 {
 	HWND hWnd;
 
 	hWnd = CreateWindow(szClassName,
 			TEXT("猫でもわかるWindowsプログラミング"), //タイトルバーにこの名前が表示されます
 			TEXT("Windowsプログラミング"), //タイトルバーにこの名前が表示されます
 			WS_OVERLAPPEDWINDOW, //ウィンドウの種類
 			CW_USEDEFAULT,	//X座標
 			CW_USEDEFAULT,	//Y座標
 			CW_USEDEFAULT,	//幅
 			CW_USEDEFAULT,	//高さ
 			NULL, //親ウィンドウのハンドル、親を作るときはNULL
 			NULL, //メニューハンドル、クラスメニューを使うときはNULL
 			hInst, //インスタンスハンドル
 			NULL);
 	if (!hWnd)
 		return FALSE;
 	ShowWindow(hWnd, nCmdShow);
 	UpdateWindow(hWnd);
 	return TRUE;
 }
 
 #pragma endregion
 
 //ウィンドウプロシージャ
 
 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
 {
 	int id;
 
 	HDC hdc;					// デバイスコンテキストハンドル(描画の出力先(ディスプレイ)へのハンドル)
 	PAINTSTRUCT ps;				// 描画構造体
 	static HDC hMemDC;			
 	static HBITMAP hBitmap;		// ビットマップハンドル
 	static BITMAP bitmap;		// ビットマップ
 
 	switch (msg) {
 		case WM_CREATE:
 			{
 				hMemDC = CreateCompatibleDC(NULL);	
 				hBitmap = (HBITMAP)LoadImage(
 					(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
 					BMPFILE,IMAGE_BITMAP,
 					0,0,LR_LOADFROMFILE);
 
 				SelectObject(hMemDC,hBitmap);
 				GetObject(hBitmap,sizeof(BITMAP),&bitmap);
 			}
 			break;
 		case WM_PAINT:
 			{
 				hdc = BeginPaint(hWnd,&ps);
 				BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,hMemDC,0,0,SRCCOPY);
 				EndPaint(hWnd,&ps);
 			}
 			break;
 		case WM_CLOSE:
 			{
 				id = MessageBox(hWnd,
 					TEXT("終了してもよろしいですか"),
 					TEXT("確認"),
 					MB_YESNO | MB_ICONQUESTION);
 				if (id == IDYES)
 					DestroyWindow(hWnd);
 			}
 			break;
 		case WM_DESTROY:
 			{
 				DeleteDC(hMemDC);		// デバイスコンテキストの削除
 				DeleteObject(hBitmap);	// ビットマップの消去
 				PostQuitMessage(0);
 			}
 			break;
 		default:
 			return (DefWindowProc(hWnd, msg, wp, lp));
 	}
 	return 0;
 }

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS