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

VC++2010のフォームアプリケーションについての質問です。
フォームに設置したピクチャーボックス上でマウスホイールをすることで、ピクチャーボックスに表示されている画像(BMP)を拡大・縮小できるようにしたいのですが…
色々と試しているのですが、
・マウスホイールのイベントが反映されない
・拡大縮小のやり方がわからない
です。
どなたかご教授頂けると幸いです。

A 回答 (2件)

画像の拡大縮小に関しては、自分で探して貰うとして……。



マウスホイールについてはMSDNの例が参考になるんじゃないですかね?
http://msdn.microsoft.com/ja-jp/library/system.w …
の「例」でC++を選択すると、Panelに対してホイール操作関連のイベントハンドラの登録と処理内容とかの例があります。
つまりコードで書く必要がある。ということですな。
# ちなみに「Windows フォーム マウスホイール」で検索して、
# http://d.hatena.ne.jp/nurs/20090624/1245841994 のページを発見し、続けて「MouseEventHandler」をMSDNで見つけたのですが。
C++/CLIはよく判らんのでここまで…です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
このMSDNのページは自分でも見つけたんですがこれを応用する(形を変える)となるとエラーが頻出しまして…

お礼日時:2013/04/10 17:00

>これを応用する(形を変える)となるとエラーが頻出しまして…



どういうエラーが出たのか。
くらいは掲示された方がよいかと思いますが。

C++/CLIはよく判っていないので、適当にいぢっただけですけど……。

Form1_Load()イベントハンドラでMSDNの例の様にpictureBox1にMouseWheelイベントハンドラを設定してみました。
イベントハンドラではブレークポイントを設定。
pictureBox1上でホイール操作をしてもブレークしない……。

フォーカスが設定されていないのか?ということで下記を追加。
this->pictureBox1->Focus();
やはりブレークしない。

Form1_Load()イベントハンドラでフォーカス設定の方法に問題がある。っぽいので検索して…
http://www.atmarkit.co.jp/fdotnet/dotnettips/226 …
を発見。
this->ActiveControl = this->pictureBox1;
に変更するとブレークしました。

が…この方法だとフォーム上に他のコントロールがあった時にフォーカスが移動しそうです。
this->MouseWheelでフォーム自体にイベントハンドラを設定して、
ハンドラに入った後で引数からマウスカーソルの座標を取得、pictureBox1の上にあるか判定してから処理した方がいいかも知れないですな。
# Win32APIなら…座標から子ウィンドウの領域内にあるか調べられたはずなのでC++/CLIでも調べられる…はず。
    • good
    • 0

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

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