パワーポイントのスライドを読み込んで表示するプログラムを
作っています
すべてのスライドを表示するモードをつけたいので
新しいスライドを開くたびにスライドをビットマップで保存して、
すべてのスライドを表示するようにしているのですが
全画面表示するたびに一つずつSelectObjectに値が読み込まれなくなっていきます
プログラムは
HBITMAP Slide[50];という配列に
新しいスライドが表示されるたびに画像を保存します
そして
SelectObject(hmdc, Slide[i*Column+j+1]);でオブジェクトを選択し
StretchBlt(hdc, j*Width, i*Hight, BMP_W/Column, BMP_H/Column, hmdc, 0, 0, BMP_W,
BMP_H, SRCAND);
でスライド枚数に合わせた表示をします
SelectObjectでオブジェクトを選択すると
保存したオブジェクトは削除されますか??
あるHDCに選択中のビットマップは、他のHDCに選択することは
できません。
HBITMAP hbmp_old = ( HBITMAP)::SelectObject( hmdc, Slide[i*Column+j+1]);
: // 何らかの処理
SelectObject( hmdc, hbmp_old); // 選択したBMPの選択を外す
のような「選択を外す」処理がされていない疑いがあります。
この辺は大丈夫ですか。
ここに書かれているコードだけでは何とも。
ただ、ビットマップのオブジェクトはハンドルを
破棄しない限りは無効にはならないと思います。
ここに書かれている内容ではハンドルが無効になっているのか
ハンドルは有効だけど、ビットマップの内容が消えてしまって
いるのかがわかりません。
(多分真っ黒になっているのではと予想していますが)
質問する場合、起こっている現象を出来る限り具体的に
説明してください。関数呼び出しでエラーが発生しているので
あればその内容まで。
提示されているコードも元のコードを行ごと貼り付けているのか
行の内の一部を貼り付けているのかわかりませんし、
関数呼び出し時の返却値を受け取る部分の記述も無いので
これで判断するのは無理です。
少なくとも状況を再現できる最小のコードを提示する必要があります。
もっとも、最小のコードを探っている内に間違いに気がつくケースは
少なく無いと思いますけれど。
仲澤@失業者さんPATIO さん
ありがとうございます
仲澤@失業者さんのおっしゃった通り
選択を外すを言う処理ができていませんでした。
解決にチェックし忘れました