以下のコードは、赤い棒グラフのつもりの四角形を描画しているのですが、
この上に、何らかのコントロールを置いて、イベントを拾いたいのです。
しかも、下にある赤い棒グラフが見えるような透明なコントロールとかを
棒グラフの上に、置けないものでしょうか?
よろしくお願い致します。
// CTestFormView メッセージ ハンドラ
void CTestFormView::OnDraw(CDC* pDC)
{
// 赤で棒グラフ描画
pDC->FillSolidRect(10, 10, 100, 100, RGB(255, 0, 0));
}
どうしてビューでイベントを拾わないのですか?
ビューがクリックされた時、クリックされた点が矩形の中に
あるかどうかを判断すれば良いだけですが。
ご回答ありがとうございます。
ビューでイベントを拾う方法では、既存のプログラムの修正が大変なため
やりたくなくて、
コントロールを貼り付ける方法を探しています。
または、コントロール自体に、描画できるような方法でもよいのですが・・・
よろしくお願い致します。
> ビューでイベントを拾う方法では、既存のプログラムの修正が大変なため
> やりたくなくて、
> コントロールを貼り付ける方法を探しています。
ビューでイベントを拾う方が修正が大変、という状況が想像できません。
プログラムがどんなに複雑(or 無茶苦茶)だったとしても、
コントロールを貼り付けて正しく制御するより、
ビューでイベントを処理する方がよほど簡単だと思うし、
ビューを変更してはいけない、というわけでもなさそう。
あなたか私が大きな勘違いをしているのかもしれませんね。
イベントって具体的に何ですか?クリックイベント?
基本的に拾いたいイベントは、クリックイベントですが、
マウスが重なった時にも、噴出し文字などを出したいので、
コントロールを置いたほうが簡単だし、マウスの座標なども
常に把握しなくて良いのでと思っています。
大変申し訳ありませんが・・・
私が知りたいことは、透明なコントロールのようなものです。
よろしくお願いします。
ソースレベルで示されてないので単に妄想ですが。
> CTestFormView
CFormView派生だと配置するコントロールの数によって描画原点がずれるとか、
その絡みで面倒だということカナ、と思ったり。
上記のような問題があるのであれば、グラフ描画部分の原点座標を別個に
貼り付けたピクチャーコントロールの左上原点からの座標に変換してから
描画すると良いのでは、と思います。
但し、自分が同様にイベントを捕らえたい、としても既にたいちうさんが指摘されて
いるように座標からグラフの当たり判定を行う関数を作ってコールするような
実装にします。
# コントロールを置くとすれば、ON_COMMAND_RANGEなりで不特定数の棒グラフ本数も
# 視野にイベントを組まないといけないので、恐らくそのほうが面倒かと。
ご指摘ありがとうございます。
説明が不十分で大変申し訳ありませんが、座標云々の考慮ではなくて、
私が知りたいのは、単に、透明なコントロールの配置、または描画可能なコントロール
の実装方法についてですので、
何かご存知のお方、ご教授よろしくお願い致します。
これを参考にしてみてください。
透明なコントロール(無料のユーザー登録が必要だと思う)
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
ご返答ありがとうございます。
よくわからないのですが、「透明なコントロール」の
サンプルソース内の以下のコントロールは、
クリックイベントを拾えるのでしょうか?
CStaticTrans m_stcTrans;
何度も申し訳ありません。
CStaticTransはどうか知らないけど、CStaticでクリックイベントを拾うには
SS_NOTIFYをセットします。
ご指摘の情報を元に、なんとかできそうな気がしてきました。
教えて戴いたサイトのソースを元に、色々と試してみます。
ありがとうございました。