- 締切済み
画像表示について
画像を表示させたいのですがうまくいきません。 途中まで打ってみたのでご意見お願いします。 (リソースから読み込んで表示させる方法) 環境:MicrosoftVisualC++ SDK ******省略********* case WM_PAINT: hdc = BeginPaint(hWnd,&ps); //ビットマップリソースハンドルの取得 hBmp = LoadBitmap( hInst, MAKEINTRESOURCE(IDB_BITMAP1)); if(hBmp == NULL){ MessageBox(hWnd,"ファイルの読み込みに失敗しました。","エラー",MB_ICONWARNING | MB_OK); exit(1); } //ビットマップの大きさの情報取得 GetObject(hBmp,(int)sizeof(BITMAP),&bmp_info); w = bmp_info.bmWidth; h = bmp_info.bmHeight; hdc_mem = CreateCompatibleDC(hdc); SelectObject(hdc_mem,hBmp); BitBlt(hdc,0,0,w,h,hdc_mem,0,0,SRCCOPY); DeleteDC(hdc_mem); DeleteObject(hBmp); EndPaint(hWnd,&ps); break; ******リソース(img.rc)****** // // Bitmap // IDB_BITMAP1 BITMAP DISCARDABLE "bitmap1.bmp" #ifdef APSTUDIO_INVOKED
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
問題なさそうに思い増す ・・・ お使いのVCのバージョンは何でしょう チェックされているのが hBmpのみですが hdc_memなども正常に生成されているか確認しましょう DeleteDCで hdc_memを削除する前に hBmpの選択をはずしたほううがいいですよ SelectObjectの戻り値を記憶しておいて これを選択しなおします hOld = (HBITMAP)SelelctObject( hdc_mem, hBmp ); // 描画処理 // 選択を戻す ::SelectObject( hdc_mem, hOld ); ::DeleteDC( hdc_mem ); ::deletObject( hBmp ); といった具合です 描画を PatBlt( hdc, 0, 0, w, h, BLACKNESS ); とした場合 黒い矩形が表示されるのでしょうか …
補足
バージョンは6.0です。 言い忘れてましたが、実行すると以下のif文でメッセージボックスが出るようになってしまってます。 if(hBmp == NULL){ MessageBox(hWnd,"ファイルの読み込みに失敗しました。","エラー",MB_ICONWARNING | MB_OK); exit(1); } 考えてみたところ、 hBmp = LoadBitmap( hInst, MAKEINTRESOURCE(IDB_BITMAP1)); に問題があるようなんですが、どうなんでしょうか。 ご意見お願いします。