プロパティシート上へのビットマップ描画 – プログラミング – Home

プロパティシート上へのビットマップ描画
 
通知
すべてクリア

[解決済] プロパティシート上へのビットマップ描画


cogfine
 cogfine
(@cogfine)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

VC++6.0+WinXP環境で、CPropertySheetクラスベースのアプリを開発しています。
プロパティページ上にピクチャボックスとその他のボタン等のコントロールを同時に配
置していますが、描画がうまく行きません。
ソースは下記の通りです。

-------------------------------------------------------------------
void MyPropertySheet::OnPaint()
{
if (IsIconic(9)
{
//省略
}
else
{
CPropertySheet::OnPaint();

// 画像の表示 ←◆追加
DispImg();
}
}

void DispImg()
{
//メモリデバイスコンテキストを使って、ピクチャボックス上に
//BitBlt()で画像転送する処理
}

-------------------------------------------------------------------

症状としては、OnPaint()をコールしても、画像が一瞬表示されるがすぐに消える。ピク
チャボックスの一部を他のウインドウ等で隠すと表示される。

当然ですが、以下の事実は分かっています。
OnPaint()関数中の「CPropertySheet::OnPaint();」をコメントアウトすると、画像は正
常に表示されるようになるが、他のコントロールの表示が崩れる。また、「DispImg
();」をコメントアウトするとコントロール系は正常表示になるが、画像は表示されな
い。
「CPropertySheet::OnPaint();」+「DispImg();」となると画像が表示されない。。

どなたか解決法をご教授いただけないでしょうか。
3日ほどハマッています。。。

よろしくお願い致します。


引用未解決
トピックタグ
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

DispImg()に問題がありそうな...
DispImg()のコードを提示した方が良いと思いますよ。


返信引用
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

原因は、親、子、孫の順にWM_PAINTがPostされるからです。
ページのOnPaintに移動すれば解決するかもしれません。

ところで、ピクチャボックスの描画について以前から気になっていることがあります。
次のようなコードは綱渡り的かつ無駄が多いです。

BOOL CALLBACK DlgProc(HWND hDlg,,,)
{
......
case WM_PAINT:
hdc = GetDC(GetDlgItem(hDlg, IDC_PICTUREBOX));
DrawMyPicture(hdc);
.......
}

ピクチャボックスの派生クラスを作るか、SS_OWNERDRAWを使うべきと思います。


返信引用
cogfine
 cogfine
(@cogfine)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

ロマさんのご指摘どおり、これまで先のソースの通りプロパティシートに記述していた
画像描画処理をプロパティページのOnPaint()に変更したところ、正常に表示されまし
た。

ありがとうございます。取り急ぎご報告まで。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました