- ベストアンサー
WindowsAPIでの画像表示について
- WindowsAPIを使用して画像を表示する方法についての質問です。
- 現在、Windowsプログラミングで画像を表示するコードを書いていますが、一部が正しく動作しません。
- 赤い四角形が画像の大きさの範囲内でしか表示されない問題について質問しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CreateCompatibleDCで作成した hdcMemをつかって CreateCompatibleBitmapをつかって仮想画面用のビットマップを作成し ココへ LoadImageなどで読み込んだ画像をBitBltなどで転送します 転送用のdcが別途必要です // 転送用のdc hdcMem = CreateCompatibleDC(NULL); // ビットマップ転送用dc hdcTmp = CreateCompatibleDC(NULL); hBmpTemp = LoadImage( NULL, _T("test.bmp"), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE ); // 画像を一時的に選択 ... 選択されていたBitmapハンドルを保存 hBmpOldTmp = SelectObject( hdcTmp, hBmpTmp ); // 仮想画面用の Bitmapを準備 hBmp = CreateCompatibleBitmap hdcTmp, WND_SIZEX, WND_SIZE_Y ); // dcに選択 hBmpOld = SelectObject( hdcMem, hBmp ); // Bitmapの大きさを取得 GetObject( hBmpTmp, sizeof(BITMAP), &bmp); // 一時dcから 仮想画面に転送 BitBlt( hdcMem, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcTnmp, 0, 0, SRCCOPY); // 一時dcの選択を元に戻す SelectObject( hdcTmp, hBmpOldTmp); // 一時dcなどを削除 DeleteDC( hdcTmp ); DeleteObject(hBmpTmp); この後Rectangleなどで hdcMemに描画してください AdjustWindowRectExは CreateWindowなどでウィンドウなどを作成する際に クライアントエリアやウィンドウのスタイル、メニューの有無によって CreateWindowのサイズをどう決めればいいかをシステムに問い合わせする関数です クライアントのサイズは GetClientRectで取得すればいいですよ
その他の回答 (1)
- chie65536
- ベストアンサー率41% (2512/6032)
CreateCompatibleDCは1x1のモノクロの画面を作ります。 SelectObjectでロードしたビットマップを仮想画面に割り当てると、仮想画面は1x1からビットマップのサイズに拡張されます。 なので、プログラムは「作成者の意図とは違うが、書いた通りに」動いています。 >これは何が悪いのでしょうか・・? 「仮想画面をウィンドゥのクライアント領域と同じサイズまで拡張しないといけないが、それをしてない」のが「悪い」のです。
お礼
やはりそうでしたか。 仮想画面をウィンドゥのクライアント領域と同じサイズまで拡張する・・ というのがいまいち良く分かりません。 GetClientRect関数でサイズが測れるというのまでは知っていたのですが、 サイズの変更の仕方が良く分かりません。 AdjustWindowRectExを使えばいいのでしょうか?
お礼
うまくいきました。ありがとうございます。