• ベストアンサー

フォームのリサイズ

現在、フォームのリサイズのときにこれ以上高さを変えないようにするために以下のようなコードを記述しています。 ------------------------------ Private Sub MDIForm_Resize()    If Height < 2500 Then     Height = 2500     Exit Sub    End If End Sub ------------------------------ 一応、これで上手くはいっているのですが、実行時、高さを2500以下にしようと動かしたとき、ちらつきというか妙な残像のようなものが出てしまいます。 こんな変な残像が出ずに、VB自身の画面を変えたときのようにピタっと止まるような表示が出来るようにする方法は無いものでしょうか。 ちなみに、開発環境はWin2000、VB6です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.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番目付近のサンプルの機能も合わせ持つと、強力なサイズ調整のカスタマイズが可能となります。

ikazuti
質問者

お礼

詳しく分かり易い説明、ありがとうございます。 上手くいきました。感謝です。

その他の回答 (4)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.4

> WM_GETMINMAXINFO おお!さすがに師匠、行けてます。 http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips116.htm >フックって何ですか?  http://www.galliver.co.jp/writing/msdn/msdn06/

ikazuti
質問者

お礼

分かりやすいページ、ありがとうございました。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

最大サイズはフックして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にフックを利用したサンプルをいくつか載せておりますので、検索してもらったら出てくると思います。

ikazuti
質問者

お礼

ありがとうございます。 No5では、詳しい説明ありがとうございました。

ikazuti
質問者

補足

 無知ですみません。フックって何ですか? Googleで調べてみましたが、サンプルが出てくるだけで、フックというものがどういうものなのかは良く分かりませんでした。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

WM_ENTERSIZEMOVE等をフックすれば、何とかなるかも。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=300712
ikazuti
質問者

お礼

フックというものが分からなかったのですが、No5で説明していただき、なんとなくですが理解できました。 こんな方法があるとは……ありがとうございます。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

残念ながらVBには、そのような機能はないようです。 VBについているサンプルもそのようにしてますから。 Delphiだと これ以上は小さくならないといった設定が可能です。

ikazuti
質問者

お礼

確かに、VB自信にはそのような機能は無いようです。 Delphiのフリーもあることですし、いっそのこと乗り換えましょうか。 ありがとうございました。

関連するQ&A