ページ 11

BITMAP構造体について

Posted: 2012年12月31日(月) 03:57
by mogo
http://wisdom.sakura.ne.jp/system/winap ... in105.html
このサイトの2番目にあるサンプルを実行すると何も表示されません。1番目はきちんと表示されました。
コンパイル時のエラーもなくなぜなのか見当がつきません。教えてください。
Windows 8 64bit Visual Studio Express 2012

Re: BITMAP構造体について

Posted: 2012年12月31日(月) 05:19
by へにっくす
デバッグのブレークポイントで、ちゃんとhBitmapが返ってきてるか確認してみてください。
おそらくNULLになっていると思います。
NULLになっているのを確認出来たら、こんどはGetLastError関数を使って、どういう値が返ってきてるか確認してみてください。

カギは、
bmWidthBytes は各行のバイト数ですが、これは直接設定する必要はありません
です。これが大ウソである可能性がありますw
(このホームページが作成された当時ではちゃんと動いていたと思われるので、一概に言えないのですが)

Re: BITMAP構造体について

Posted: 2012年12月31日(月) 05:42
by mogo
+ hBitmap 0x00000000 {unused=??? } HBITMAP__ *
と表示されました。GetLastError関数の使い方が調べてもわからなかったので、サンプルのどこにどう
追加すればいいのか教えてもらえますか。というかこれは環境のせいで表示されてないんですか?

Re: BITMAP構造体について

Posted: 2012年12月31日(月) 05:46
by mogo
カギは、
bmWidthBytes は各行のバイト数ですが、これは直接設定する必要はありません
です。

bmBitmap.bmWidthBytesでぐぐるとサンプルコードの修正が書かれているページがみつかりました。
これに = 6;を追加すると無事表示されました。ありがとうございます。

Re: BITMAP構造体について

Posted: 2012年12月31日(月) 06:01
by へにっくす
mogo さんが書きました:GetLastError関数の使い方が調べてもわからなかったので、サンプルのどこにどう
追加すればいいのか教えてもらえますか。
解決しちゃったようですが、エラーになるケースで値を取得するように組めばいいだけです。

コード:

hBitmap = CreateBitmapIndirect(&bmBitmap);
if ( !hBitmap )
{
	dwRet = GetLastError();
	// dwRet がエラーコード(DWORDで宣言)。WINERROR.Hで調べることができる。
}