ページ 11

(C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 00:22
by desire
CのWindows APIを書籍を使って勉強中でビットマップを表示させようとしているのですが上手くいきません
よければ教えてください、お願いします!
ソースファイルなどは全て同じフォルダに入れています
エラー内容
error RC1004: unexpected end of file found (ファイルパス)..\Header.h

コード:

//Resource.c

#include "Header.h"
BMP BITMAP "auto.bmp"

コード:

//Header.h
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
HINSTANCE hInst;
TCHAR szClassName[] = TEXT("Windows Program sample");	

コード:


//source.c
#include "Header.h"
//(省略)

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
	PAINTSTRUCT ps;
	HDC hdc, hMdc;
	HBITMAP hbmp;
	BITMAP bmp_info;
	int w, h;
	switch (msg)
	{
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		hbmp = LoadBitmap(hInst,TEXT("BMP"));
		GetObject(hbmp, (int)sizeof(BITMAP), &bmp_info);
		hMdc = CreateCompatibleDC(hdc);
		SelectObject(hMdc, hbmp);
		w = bmp_info.bmWidth;
		h = bmp_info.bmHeight;
		BitBlt(hdc, 0, 0, w, h, hMdc, 0, 0, SRCCOPY);
		StretchBlt(hdc, w, 0, w*2, h*2,
			hMdc, 0, 0, w, h, SRCCOPY);

		DeleteDC(hMdc);
		DeleteObject(hbmp);
		break;
                //省略

Re: (C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 03:40
by へにっくす
desire さんが書きました:error RC1004: unexpected end of file found (ファイルパス)..\Header.h
リソースコンパイルのエラーですね。
Header.hの内容にプロトタイプ関数宣言がありますが、これ、リソースに必要ですか?
リソースのヘッダーに関数の定義はできなかったと思います。リソース用のヘッダーファイルと、C/C++言語のヘッダーファイルは分けてください。

Re: (C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 06:34
by desire
返信ありがとうございます
ヘッダに関数宣言をしていたのは特に意味のないことですがこれが邪魔していたとは(汗)
リソース用のヘッダファイルを作らないといけないというのを初めて知って、さっそく試したところエラーが消えてくれました
のですが、コンパイルして実行しても画像が表示されずエラーが出ず実行できてしまって、このような経験もないので解決しようと粘ってみたのですがわかりませんでした。
自分にはわからない他のファイルに原因があるのかなと思ったのでプロジェクトファイルを用意させてもらいます
http://www1.axfc.net/uploader/so/3038232.zip

初心者なりに頑張って足掻いてみますが、もし自力で解決できたらそのときにまた自分から書き込みます

Re: (C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 07:34
by みけCAT
グローバル変数hInstに値を代入している場所が見つかりませんでした。
コンパイルを通しウィンドウを出すための修正をし、

コード:

hbmp = LoadBitmap(hInst, TEXT("BMP"));
という行を

コード:

hbmp = LoadBitmap(GetModuleHandle(NULL), TEXT("BMP"));
と修正したら画像が表示されました。

改造後Source.cpp
► スポイラーを表示
オフトピック
後々のために作ったのだとは思いますが、どうせ空ファイルならresource.hは必要ない気がします。
また、ヘッダで変数の実体を無条件に作るのは、後々のために良くないと思います。

Re: (C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 17:59
by desire
返信ありがとうございます
指摘してもらってソースを見たところhInstに値を代入していなかったみたいなので代入してみたところ無事表示されました。
しかも、ただソースを修正してもらっただけでなくソースの書き方のアドバイスも頂けてとても嬉しいです。
ヘッダの使い方もまだまだみたいなのでもっと精進します

この件は解決したので閉じさせてもらいます。
ありがとうございました!

Re: (C) Windows API BMPファイルを表示できない

Posted: 2013年9月24日(火) 18:00
by desire
チェックし忘れてました