棒グラフの上にコントロールを置きたい

[戻る]
たまお 2007/12/21(金) 15:01:15
以下のコードは、赤い棒グラフのつもりの四角形を描画しているのですが、
この上に、何らかのコントロールを置いて、イベントを拾いたいのです。
しかも、下にある赤い棒グラフが見えるような透明なコントロールとかを
棒グラフの上に、置けないものでしょうか?
よろしくお願い致します。

// CTestFormView メッセージ ハンドラ
void CTestFormView::OnDraw(CDC* pDC) 
{

// 赤で棒グラフ描画
pDC->FillSolidRect(10, 10, 100, 100, RGB(255, 0, 0));    

}

たいちう 2007/12/21(金) 16:42:14
どうしてビューでイベントを拾わないのですか?

ビューがクリックされた時、クリックされた点が矩形の中に
あるかどうかを判断すれば良いだけですが。

たまお 2007/12/21(金) 17:51:44
ご回答ありがとうございます。
ビューでイベントを拾う方法では、既存のプログラムの修正が大変なため
やりたくなくて、
コントロールを貼り付ける方法を探しています。
または、コントロール自体に、描画できるような方法でもよいのですが・・・
よろしくお願い致します。

たいちう 2007/12/21(金) 18:05:49
> ビューでイベントを拾う方法では、既存のプログラムの修正が大変なため
> やりたくなくて、
> コントロールを貼り付ける方法を探しています。

ビューでイベントを拾う方が修正が大変、という状況が想像できません。
プログラムがどんなに複雑(or 無茶苦茶)だったとしても、
コントロールを貼り付けて正しく制御するより、
ビューでイベントを処理する方がよほど簡単だと思うし、
ビューを変更してはいけない、というわけでもなさそう。

あなたか私が大きな勘違いをしているのかもしれませんね。
イベントって具体的に何ですか?クリックイベント?

たまお 2007/12/21(金) 18:16:08
基本的に拾いたいイベントは、クリックイベントですが、
マウスが重なった時にも、噴出し文字などを出したいので、
コントロールを置いたほうが簡単だし、マウスの座標なども
常に把握しなくて良いのでと思っています。

大変申し訳ありませんが・・・
私が知りたいことは、透明なコントロールのようなものです。
よろしくお願いします。

玲音 (st.lain) 2007/12/21(金) 18:23:29
ソースレベルで示されてないので単に妄想ですが。

> CTestFormView
CFormView派生だと配置するコントロールの数によって描画原点がずれるとか、
その絡みで面倒だということカナ、と思ったり。

上記のような問題があるのであれば、グラフ描画部分の原点座標を別個に
貼り付けたピクチャーコントロールの左上原点からの座標に変換してから
描画すると良いのでは、と思います。


但し、自分が同様にイベントを捕らえたい、としても既にたいちうさんが指摘されて
いるように座標からグラフの当たり判定を行う関数を作ってコールするような
実装にします。

# コントロールを置くとすれば、ON_COMMAND_RANGEなりで不特定数の棒グラフ本数も
# 視野にイベントを組まないといけないので、恐らくそのほうが面倒かと。

たまお 2007/12/21(金) 18:40:02
ご指摘ありがとうございます。
説明が不十分で大変申し訳ありませんが、座標云々の考慮ではなくて、

私が知りたいのは、単に、透明なコントロールの配置、または描画可能なコントロール
の実装方法についてですので、
何かご存知のお方、ご教授よろしくお願い致します。

たいちう 2007/12/21(金) 18:50:22
これを参考にしてみてください。

透明なコントロール(無料のユーザー登録が必要だと思う)
http://www.codeproject.com/KB/edit/ctrltrans.aspx?df=100&forumid=2701&exp=0&select=1577862&tid=1443642

描画可能なコントロール
http://www.athomejp.com/goldfish/mfc/static/static_ex.asp

たまお 2007/12/21(金) 20:25:55
ご返答ありがとうございます。 

よくわからないのですが、「透明なコントロール」の
サンプルソース内の以下のコントロールは、
クリックイベントを拾えるのでしょうか?

CStaticTrans    m_stcTrans;

何度も申し訳ありません。

たいちう 2007/12/21(金) 21:59:30
CStaticTransはどうか知らないけど、CStaticでクリックイベントを拾うには
SS_NOTIFYをセットします。

たまお 2007/12/21(金) 23:27:04
[[解決]]
ご指摘の情報を元に、なんとかできそうな気がしてきました。
教えて戴いたサイトのソースを元に、色々と試してみます。
ありがとうございました。

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