テンプレ使わせて頂きますね。
[1] 質問文
[1.1] 自分が今行いたい事は何か
WinAPIを用いたバックバッファ(ビットマップをファイルから読み込み、一度裏画面に出力、その裏画面をディスプレイに出力するプログラム)
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
#include <windows.h>
#define BMPFILE TEXT("test.bmp")
LRESULT CALLBACK WindowProc (
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
) {
HDC hdc;
PAINTSTRUCT ps;
static HDC hBackDC,hBmpDC;
static HBITMAP hSampleBmp,hBackBmp;
static BITMAP bitmap;
switch(uMsg) {
case WM_DESTROY:
DeleteDC(hBackDC);
DeleteDC(hBmpDC);
DeleteObject(hSampleBmp);
DeleteObject(hBackBmp);
PostQuitMessage(0);
return 0;
case WM_CREATE:
//ビットマップ用のデバイスコンテキスト
hBmpDC = CreateCompatibleDC(NULL);
hSampleBmp = LoadImage(
NULL , BMPFILE , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE
);
SelectObject(hBmpDC , hSampleBmp);
GetObject(hSampleBmp , sizeof(BITMAP) , &bitmap);
//バックバッファ用のデバイスコンテキスト
hBackDC = CreateCompatibleDC(NULL);
hBackBmp = CreateCompatibleBitmap(NULL , bitmap.bmWidth , bitmap.bmHeight);
SelectObject(hBackDC , hBackBmp);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
//ビットマップからバックバッファへの出力
BitBlt(
hBackDC , 0 , 0 , bitmap.bmWidth , bitmap.bmHeight ,
hBmpDC, 0 , 0 , SRCCOPY
);
//バックバッファからディスプレイへの出力
BitBlt(
hdc , 0 , 0 , bitmap.bmWidth , bitmap.bmHeight ,
hBackDC, 0 , 0 , SRCCOPY
);
EndPaint(hWnd , &ps);
return 0;
}
return DefWindowProc(hWnd , uMsg , wParam , lParam);
}
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
エラーメッセージはありません。
無事にコンパイルされるのですが、肝心の画像がウィンドウに出力されないので困っています。
元々はとある参考書の付録からの引用を改変してみたのですが、うまくいきません。
元々のソースでは、
「ファイル」→「仮想メモリ」→「ディスプレイ」という工程を踏んでいたのですが、
「ファイル」→「仮想メモリ1」→「仮想メモリ2(裏画面)」→「ディスプレイ」という操作ができるように変えたいのです。
[1.4] 今何がわからないのか、知りたいのか
どうしたらこの工程を踏んで画像をディスプレイに出力できるようになるのでしょうか?
[2] 環境
[2.1] OS : Windows Vista
[2.2] コンパイラ名 : VC++ 2008Express
[3] その他
・どの程度C言語を理解しているか
一応数冊参考書を読みました。大きなプロジェクトは未経験ですが、文字列制御、数値計算やグラフの出力といった小さなプログラムはいくつか作ってきているので、それなりに使えると自分では思っています。
わかる方がおられましたら、ご回答のほど宜しくお願いします。