CFormViewで再描画 – プログラミング – Home

通知
すべてクリア

[解決済] CFormViewで再描画


shishimaru
 shishimaru
(@shishimaru)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

はじめまして.
VC++6.0を使ってMFCベース,SDIでアプリを作っています.
ボタンをクリックしてピクチャボックスに絵を表示するようなアプリなんですが,
最大化,最小化ボタンを押すと,
それまでピクチャボックスに表示されていた物が消えてしまいます.

どなたかアドバイスをお願いします.


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ピクチャボックスは単に描画位置をリソースで動かしたいから
使っているだけだと思いますけれど、
絵を表示するコードはピクチャボックスのDCを取ってきて
そこに描画しているではないですか?
さらにその描画部分はボタンを押された時のハンドラにしかないと。

ウインドウズの描画の仕組みを理解していない所為です。
ウインドウズで画面の描画を行う場所というのは特定のハンドラ内に
無ければなりません。そうしないとOSが再描画を要請した時に
描画されないからです。
ウインドウの再描画が必要になるタイミング(最小化や最大化、
重なっていた他のウインドウが移動した等々)でOSが各ウインドウに
WM_PAINTメッセージを投げるので各ウインドウはこのメッセージが
来たらいつでもウインドウの再描画が出来るようにコードを書く必要が
あるのです。従って画面の描画にかかわるコードはこのメッセージの
ハンドラ内にコードがあるか、ハンドラ内から呼び出される関数の中に
記述されている必要があります。
ボタンのクリックハンドラで描画をしてもよいのですが、
同じコードがWM_PAINTのハンドラ内からも呼ばれている必要があります。
この辺はウインドウズの基本ですから、よく勉強してくださいね。


返信引用
shishimaru
 shishimaru
(@shishimaru)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

PATIOさん

>ピクチャボックスは単に描画位置をリソースで動かしたいから
>使っているだけだと思いますけれど、
>絵を表示するコードはピクチャボックスのDCを取ってきて
>そこに描画しているではないですか?
>さらにその描画部分はボタンを押された時のハンドラにしかないと。

まさに,そのとおりです.

だいたい書かれている内容で,
仕組みが分かったのですが,
WM_PAINTのハンドラが少しよく分かりません.
実際にどこでそれを行っているのか見つけられませんでした.


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

クラスウイザードの使い方はマスターされていますか?
ここからハンドラ-の追加が出来ます。

また、クラスビュウからもハンドラの追加が出来ますよ。

WM_PAINTでHELPを検索すれば出てきそうな気もするのですけれど、
見つけられませんでしたか?

CWndクラスのHELPを覗いていても同じような名前のハンドラが説明されていると思いますよ。
ちなみに、Doc-Viewアーキテクチャを使っている場合、描画の実装ハンドラ若干異なります。
これについてはDoc-ViewアーキテクチャのHELPの説明を熟読しましょう。


返信引用
shishimaru
 shishimaru
(@shishimaru)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

クラスウイザードでハンドラを追加し,
ボタンの描画コードを写したらできました.

どうも,ありがとうございました.


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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