プロが教えるわが家の防犯対策術!

VC++でCStatic型のピクチャーコントロール(例:m_StaticFlame)に線画の描画を行っています。(描画領域=表示領域)
ピクチャーコントロールの表示領域には限度があるため、ワープロやCADと同じように描画領域を大きく取って一部分だけを表示し、スクロールバーで表示領域を移動させたいと考えております。
良い方法をご存じの方いらっしゃいましたら教えて頂けないでしょうか。

今の所、Class WizardでCScrollViewのクラス(CScrollViewTest)を作成し、m_StaticFlameに関連づけてスクロールバー付きの表示にしようと考えていますが、描画領域の定義からCScrollViewTestやm_StaticFlameとの関連付け、表示方法、さらにこの方法が正しいかどうかも分かりません。

A 回答 (1件)

ピクチャーコントロールの変わりにCScrollViewですか?


ピクチャーコントロールと仰ってるという事は、ダイアログですよね?
(違う場合もありますけど・・・)
もしそうならば、この状態でCScrollViewを使うのは困難かと思います。

CScrollViewを使いたいのは、表示領域をスクロールバーによって変えたいだけですよね?であれば、普通にCWndから派生させて、作るウィンドウにWS_HSCROLLやWS_VSCROLLスタイルをつけてあげればスクロールバーも出ますので、そちらをお勧めします。

でスクロールバーがついた状態で・・・

まず、flowergooさんはGDIによって線などを描画することは、できるのですよね?であれば、あとはスクロールバーの位置によって描画する座標を変更してあげればよいだけです。
例えば
pDC->MoveTo (0, 0);
pDC->LineTo (100, 100);
のように単純な線の場合で横方向にスクロールさせたいのであれば
pDC->MoveTo (x, 0);
pDC->LineTo (x + 100, 100);
として xの値をスクロールバーから取得すればよいわけです。
まーこんなことをしてると管理も大変ですが、基本はこんな感じになると思います。実際には、座標管理(座標変換)を行う関数やクラスを経由して描画する座標位置を求めることになると思いますが。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。
回答者様のおっしゃる通り、作成しているプロジェクトはダイアログです。
CScrollViewはやはり基本的にMDIかSDIで使うのものなのですね。
コントロールにWS_HSCROLL等のスタイルをつけてみます。

GDI描画につきましては色々と経験しているので分かるのですが、スクロールの対応方法については良い参考となりました。
早速試して見ます。

お礼日時:2006/12/05 23:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています