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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
desire
記事: 4
登録日時: 12年前

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

#1

投稿記事 by desire » 12年前

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;
                //省略

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

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

#2

投稿記事 by へにっくす » 12年前

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

desire
記事: 4
登録日時: 12年前

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

#3

投稿記事 by desire » 12年前

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

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

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 12年前

グローバル変数hInstに値を代入している場所が見つかりませんでした。
コンパイルを通しウィンドウを出すための修正をし、

コード:

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

コード:

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

改造後Source.cpp
► スポイラーを表示
オフトピック
後々のために作ったのだとは思いますが、どうせ空ファイルならresource.hは必要ない気がします。
また、ヘッダで変数の実体を無条件に作るのは、後々のために良くないと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

desire
記事: 4
登録日時: 12年前

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

#5

投稿記事 by desire » 12年前

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

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

desire
記事: 4
登録日時: 12年前

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

#6

投稿記事 by desire » 12年前

チェックし忘れてました

閉鎖

“C言語何でも質問掲示板” へ戻る