SelectObjectについて

[戻る]
vivace 2010/08/17(火) 16:42:49
パワーポイントのスライドを読み込んで表示するプログラムを
作っています

すべてのスライドを表示するモードをつけたいので
新しいスライドを開くたびにスライドをビットマップで保存して、
すべてのスライドを表示するようにしているのですが
全画面表示するたびに一つずつ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でオブジェクトを選択すると
保存したオブジェクトは削除されますか??

仲澤@失業者 2010/08/17(火) 17:16:19
あるHDCに選択中のビットマップは、他のHDCに選択することは
できません。

HBITMAP  hbmp_old = ( HBITMAP)::SelectObject( hmdc, Slide[i*Column+j+1]);

  : // 何らかの処理

SelectObject( hmdc, hbmp_old); // 選択したBMPの選択を外す

のような「選択を外す」処理がされていない疑いがあります。
この辺は大丈夫ですか。

PATIO 2010/08/17(火) 17:20:51
ここに書かれているコードだけでは何とも。

ただ、ビットマップのオブジェクトはハンドルを
破棄しない限りは無効にはならないと思います。
ここに書かれている内容ではハンドルが無効になっているのか
ハンドルは有効だけど、ビットマップの内容が消えてしまって
いるのかがわかりません。
(多分真っ黒になっているのではと予想していますが)

質問する場合、起こっている現象を出来る限り具体的に
説明してください。関数呼び出しでエラーが発生しているので
あればその内容まで。

提示されているコードも元のコードを行ごと貼り付けているのか
行の内の一部を貼り付けているのかわかりませんし、
関数呼び出し時の返却値を受け取る部分の記述も無いので
これで判断するのは無理です。

少なくとも状況を再現できる最小のコードを提示する必要があります。
もっとも、最小のコードを探っている内に間違いに気がつくケースは
少なく無いと思いますけれど。

vivace 2010/08/20(金) 14:15:16
仲澤@失業者さんPATIO さん
ありがとうございます

仲澤@失業者さんのおっしゃった通り
選択を外すを言う処理ができていませんでした。

vivace 2010/08/20(金) 14:20:50
[[解決]]
解決にチェックし忘れました

古いスレッドには追加発言できません。