- ベストアンサー
フォームのリサイズ
現在、フォームのリサイズのときにこれ以上高さを変えないようにするために以下のようなコードを記述しています。 ------------------------------ Private Sub MDIForm_Resize() If Height < 2500 Then Height = 2500 Exit Sub End If End Sub ------------------------------ 一応、これで上手くはいっているのですが、実行時、高さを2500以下にしようと動かしたとき、ちらつきというか妙な残像のようなものが出てしまいます。 こんな変な残像が出ずに、VB自身の画面を変えたときのようにピタっと止まるような表示が出来るようにする方法は無いものでしょうか。 ちなみに、開発環境はWin2000、VB6です。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
とーどー兄ぃぃぃ 補足ありがとうですぅぅ フックについての個人的な理解を勝手に書きます。違ってたら指摘ください。 VBのマウスムーブイベントの起こり方の例(かなり抜粋) 1.ユーザがマウス動かす 2.WINDOWSがマウスの動きを認識 3.WINDOWSがマウスの座標を認識 4.WINDOWSがマウスの位置のウィンドウを認識 5.WINDOWSがマウス位置のウィンドウにマウスが動いたことを通知 (仮にVBで作ったウィンドウだとします) 6.VBがマウスの動きを認識 7.VBがマウスの座標を認識 8.VBがMouseMoveイベントを起こす というような動きだと思っています。 これは仮にフォームなどであることを前提とした例ですが、実際にはもっともっといろいろな情報がWINDOWSからVBに渡されています。ですので本当はピクチャボックスにもリサイズイベントが起きています。ただVBでそのイベントを発生させていないだけです。 普通のコーディングであれば、VBの起こしたイベントを駆使してプログラミングを行うのですが、フックという作業を行うことにより、もっと幅の広いプログラミングが可能となります。 簡単にいうと、VB任せのイベントではなく、例であげた5番のVBへの通知してきたWINDOWSからのメッセージを全て横取りして、VB機能だけでは認識できないイベントを認識してしまおうと言うことです。 VBではフォームのサイズ変更については、サイズ変更後のイベントしか存在していません。実際サイズ変更についてフォームは 一.サイズ変更開始 二.サイズ変更中 三.サイズ変更中状態解除 四.WINDOWS仕様で定められたサイズ内であるかをチェック 五.サイズがWINDOWS仕様のサイズ外であるときは、ウィンドウの自動リサイズ 六.サイズ変更終了 の通知がされています。 この四の通知イベントを横取りして、仕様サイズを無視しようというものです。 サンプルは http://www.vbvbvb.com/jp/gtips/index0801.html の826番目です。その826番目付近のサンプルの機能も合わせ持つと、強力なサイズ調整のカスタマイズが可能となります。
その他の回答 (4)
- todo36
- ベストアンサー率58% (728/1234)
> WM_GETMINMAXINFO おお!さすがに師匠、行けてます。 http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips116.htm >フックって何ですか? http://www.galliver.co.jp/writing/msdn/msdn06/
お礼
分かりやすいページ、ありがとうございました。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
最大サイズはフックしてWM_GETMINMAXINFOをキャッチする MINMAXINFO構造体でトラッキングサイズを読み取り、セットしてあげる http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_minmaxinfo_structure.asp 最大サイズならptMaxTrackSizeを再セットしてあげましょう フックに関して分らなかったら再度質問してください。 一応ここのBBSにフックを利用したサンプルをいくつか載せておりますので、検索してもらったら出てくると思います。
お礼
ありがとうございます。 No5では、詳しい説明ありがとうございました。
補足
無知ですみません。フックって何ですか? Googleで調べてみましたが、サンプルが出てくるだけで、フックというものがどういうものなのかは良く分かりませんでした。
- todo36
- ベストアンサー率58% (728/1234)
WM_ENTERSIZEMOVE等をフックすれば、何とかなるかも。
お礼
フックというものが分からなかったのですが、No5で説明していただき、なんとなくですが理解できました。 こんな方法があるとは……ありがとうございます。
- taknt
- ベストアンサー率19% (1556/7783)
残念ながらVBには、そのような機能はないようです。 VBについているサンプルもそのようにしてますから。 Delphiだと これ以上は小さくならないといった設定が可能です。
お礼
確かに、VB自信にはそのような機能は無いようです。 Delphiのフリーもあることですし、いっそのこと乗り換えましょうか。 ありがとうございました。
お礼
詳しく分かり易い説明、ありがとうございます。 上手くいきました。感謝です。