プロが教えるわが家の防犯対策術!

bmpを表示する関数と処理する関数を別々のファイルにしたいのですが、表示されません・・・。エラー、警告はありませんでした。VC++2008を使用しています。ソースは以下のようになっています。よろしくお願い致します。

~ 処理部分 load_bmp.cpp ~
#include<windows.h>
#include<stdio.h>
#include <tchar.h>

externHINSTANCE hinst;
externHWND hwnd;

int Load_Bmp( HDC hdc, char *f_name_of_BMP)
{
HBITMAPhbmp;
HDCwork_DC;

hbmp=(HBITMAP)LoadImage(hinst,_T ("f_name_of_BMP"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
if( hbmp == NULL ){
MessageBox(hwnd, _T("ビットマップを表示できません"), _T("エラー"),MB_OK | MB_ICONWARNING);
return 0;
}

work_DC = CreateCompatibleDC( hdc );
SelectObject( work_DC, hbmp );

BitBlt(hdc,0,0,640,480,work_DC,0,0,SRCCOPY);

ReleaseDC( hwnd,work_DC );
DeleteObject( hbmp );

return 0;
}

~ヘッダファイル load_bmp.h ~
int Load_Bmp( HDC hdc,char *f_name_of_BMP);

~処理部分 main.cpp ~
#include<windows.h>
#include <tchar.h>
#include "load_bmp.h"

HWNDhwnd;
HDCwin_hdc;
HINSTANCEhinst;void init_game()
{
Load_Bmp( win_hdc,"test.bmp");
}

LRESULT WndProc(HWND hwnd,UINT msg,WPARAM wprm,LPARAM lprm)
{
switch(msg){
caseWM_CREATE: break;
caseWM_DESTROY: PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wprm,lprm);
}
return 0;
}

int APIENTRY WinMain(HINSTANCE hIns,HINSTANCE hPI,LPSTR lpArg,int nCmdShow)
{
MSGmsg;
WNDCLASSwc;
hinst=hIns;
wc.hInstance=hIns;
wc.lpszClassName=_T("test");
wc.lpfnWndProc=(WNDPROC)WndProc;wc.style=0;wc.hIcon=LoadIcon((HINSTANCE)NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor((HINSTANCE)NULL,IDC_ARROW);
wc.lpszMenuName=0;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
if(RegisterClass(&wc)==0)return 0;

hwnd=CreateWindowEx(
0,
wc.lpszClassName, _T("test"),
WS_OVERLAPPEDWINDOW, 20,20,640,480,
NULL,NULL, hIns,NULL    );

if(!hwnd)
return 0;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
win_hdc=GetDC(hwnd);

init_game();

while(1){
 if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){
(!GetMessage(&msg,(HWND)NULL,0,0));break;TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

A 回答 (2件)

基本部分から…なんでしょうか。



有名どころの「猫でもわかるプログラミング」を参照された方が良いのでは?
http://www.kumei.ne.jp/c_lang/index.html
書籍も出ています。
Webの方は、最新のVisual Studioではうまくいかない場合がありますので
トップページなどに書かれている注意書きをよく読みましょう。


>hbmp=(HBITMAP)LoadImage(hinst,_T ("f_name_of_BMP"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
こちらは、引数で渡されたファイル名ではなく、カレントディレクトリにある「f_name_of_BMP」というファイルを指定していることになります。
どう修正するのか…については調べてみてください。

# 特定の名前のBMPファイルを読み込んでWindowに表示…だけでもまだ数点不足しているようですが。
    • good
    • 0
この回答へのお礼

回答どうもありがとうございます。
「猫でもわかるプログラミング」を見てみました。そこからリソーススクリプトについて調べたところ、解決しました。
ご指摘ありがとうございました。

お礼日時:2008/08/19 19:19

>int Load_Bmp( HDC hdc, char *f_name_of_BMP)


>hbmp=(HBITMAP)LoadImage(hinst,_T ("f_name_of_BMP"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);

LoadImage()の第2引数は実際のコードでこのように書かれているのでしょうか?
その場合、なにを意図してこのように書かれたのでしよう?
このように記述した場合、「Load_Bmp()の第2引数で受け取った文字列が展開される」などという機能はありませんが意図したものですか?

bmpファイルを指定して読み込む場合(LR_LOADFROMFILE指定の場合)はLoadImage()の第1引数はNULLでもよかったかと思います。
# MSDNで確認してください。
    • good
    • 0
この回答へのお礼

回答どうもありがとうございます。
このコードは http://www4.nasuinfo.or.jp/~hobby/index.shtml にあるものを参考にしました。

意図というよりも何も知らずにそのまま書いただけです・・・。
別の関数からmain関数に渡すための引数の指定がわかりません。
#MSDNで確認してみます。

お礼日時:2008/08/18 08:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!