ビットマップの表示の方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mai

ビットマップの表示の方法

#1

投稿記事 by mai » 12年前

ビットマップの画像をリソースから読み込み表示したいのですがうまくできません。
ソースファイル

コード:

define     NAME    "Section4.2 bmpresource"  //タイトルバーに表示するテキスト
#include    <windows.h>
#include "resource1.h"

//プロトタイプ宣言
LRESULT CALLBACK   WndProc(HWND, UINT, WPARAM, LPARAM);
int     PASCAL     WinMain(HINSTANCE, HINSTANCE, LPSTR, int);

//global variable
HINSTANCE   ghInst;

//Windws イベント用関数
LRESULT  CALLBACK  WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    HDC         hdc, hMdc;
    PAINTSTRUCT ps;
    HBITMAP     hbmp;
    
    //渡された message から、イベントの種類を解析する
    switch(msg){
    case WM_CREATE:
        break;
    
    //----ペイント----
    case WM_PAINT:
        hdc= BeginPaint (hWnd, &ps);
        
        //リソースからBMPを読み込む
        hbmp= LoadBitmap( ghInst, MAKEINTRESOURCE(IDB_BITMAP1) );
        
        hMdc= CreateCompatibleDC( hdc );
        SelectObject( hMdc, hbmp );
        
        BitBlt(hdc, 10, 20, 256, 256, hMdc, 0, 0, SRCCOPY);
        
        DeleteDC(hMdc);
        DeleteObject( hbmp );
        
        EndPaint(hWnd, &ps);
        break;
    
    //----終了処理----
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0L;
    }
    //デフォルトの処理
    return  DefWindowProc(hWnd,msg,wParam,lParam);
}

//Windows Main 関数
int PASCAL  WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    HWND        hWnd;
    MSG         msg;
    
    ghInst = hInstance;
    
    // Set up and register window class
    WNDCLASS wc = { CS_CLASSDC,
                    WndProc,                               //イベントcallback関数
                    0L,
                    0L,
                    hInstance,
                    NULL,                                  //アイコン
                    LoadCursor(NULL,IDC_ARROW),            //マウスカーソル
                    (HBRUSH)GetStockObject(WHITE_BRUSH),
                    NULL,
                    NAME };
    if(RegisterClass(&wc)==0) return FALSE;
    
    //ウインドウ生成
    hWnd= CreateWindow( NAME, NAME, WS_OVERLAPPEDWINDOW,
                        50, 50, 256, 256, //ウインドウサイズ 左上x座標, 左上y座標, 幅, 高さ
                        NULL, NULL, hInstance, NULL);
    if(!hWnd) return FALSE;
    
    ShowWindow(hWnd,nCmdShow);      //Window を表示
    UpdateWindow(hWnd);             //表示を初期化
    SetFocus(hWnd);                 //フォーカスを設定
    
    while(GetMessage(&msg,NULL,0,0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
ヘッダーファイル

コード:

#define IDB_BITMAP1                     101
リソースファイル

コード:

#include <windows.h>
#include "resource.h"

IDB_BITMAP1             BITMAP  DISCARDABLE     "star.bmp"


このようなプログラムなのですがエラーが出ます。
どこをどのようになおせばいいのか教えてください

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: ビットマップの表示の方法

#2

投稿記事 by h2so5 » 12年前

エラーの內容を書いてください。

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

Re: ビットマップの表示の方法

#3

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

1行目にdefineという不正なトークンがあります。
コピペの時のミスでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: ビットマップの表示の方法

#4

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

「ヘッダーファイル」はresource.hとresource1.hで共通の内容でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: ビットマップの表示の方法

#5

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

こちらで試した(defineの問題を修正、resource.hとresource1.hは同一内容と仮定)ところ、画像が表示されました。
実験に使用したファイルを添付します。
添付ファイル
bitmap_hyouzi.zip
実験に使用したファイル
(15.89 KiB) ダウンロード数: 150 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

mai

Re: ビットマップの表示の方法

#6

投稿記事 by mai » 12年前

1>------ ビルド開始: プロジェクト: nakao1.c, 構成: Debug Win32 ------
1>コンパイルしています...
1>akinobu.cpp
1>c:\documents and settings\2013sotsuken\my documents\visual studio 2005\projects\nakao1.c\nakao1.c\akinobu.cpp(67) : error C2440: '初期化中' : 'const char [23]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\2013sotsuken\my documents\visual studio 2005\projects\nakao1.c\nakao1.c\akinobu.cpp(73) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [23]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\2013sotsuken\my documents\visual studio 2005\projects\nakao1.c\nakao1.c\akinobu.cpp(84) : warning C4244: 'return' : 'WPARAM' から 'int' への変換です。データが失われる可能性があります。
1>ビルドログは "file://c:\Documents and Settings\2013Sotsuken\My Documents\Visual Studio 2005\Projects\nakao1.c\nakao1.c\Debug\BuildLog.htm" に保存されました。
1>nakao1.c - エラー 2、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

このようなエラーがでるのですが、どうすればいいですか?

閉鎖

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