アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、フォームのリサイズのときにこれ以上高さを変えないようにするために以下のようなコードを記述しています。

------------------------------
Private Sub MDIForm_Resize()
   If Height < 2500 Then
    Height = 2500
    Exit Sub
   End If
End Sub
------------------------------

一応、これで上手くはいっているのですが、実行時、高さを2500以下にしようと動かしたとき、ちらつきというか妙な残像のようなものが出てしまいます。

こんな変な残像が出ずに、VB自身の画面を変えたときのようにピタっと止まるような表示が出来るようにする方法は無いものでしょうか。

ちなみに、開発環境はWin2000、VB6です。

よろしくお願いします。

A 回答 (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番目付近のサンプルの機能も合わせ持つと、強力なサイズ調整のカスタマイズが可能となります。
    • good
    • 0
この回答へのお礼

詳しく分かり易い説明、ありがとうございます。

上手くいきました。感謝です。

お礼日時:2002/11/08 09:34

> WM_GETMINMAXINFO


おお!さすがに師匠、行けてます。
http://www.geocities.co.jp/SiliconValley/4805/vb …

>フックって何ですか? 
http://www.galliver.co.jp/writing/msdn/msdn06/
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/11/08 09:33

最大サイズはフックしてWM_GETMINMAXINFOをキャッチする


MINMAXINFO構造体でトラッキングサイズを読み取り、セットしてあげる
http://www.microsoft.com/japan/msdn/library/defa …
最大サイズならptMaxTrackSizeを再セットしてあげましょう

フックに関して分らなかったら再度質問してください。
一応ここのBBSにフックを利用したサンプルをいくつか載せておりますので、検索してもらったら出てくると思います。

この回答への補足

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

補足日時:2002/11/07 17:04
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/11/08 09:31

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



参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=300712
    • good
    • 0
この回答へのお礼

フックというものが分からなかったのですが、No5で説明していただき、なんとなくですが理解できました。

こんな方法があるとは……ありがとうございます。

お礼日時:2002/11/08 09:29

残念ながらVBには、そのような機能はないようです。


VBについているサンプルもそのようにしてますから。

Delphiだと これ以上は小さくならないといった設定が可能です。
    • good
    • 0
この回答へのお礼

確かに、VB自信にはそのような機能は無いようです。

Delphiのフリーもあることですし、いっそのこと乗り換えましょうか。

ありがとうございました。

お礼日時:2002/11/08 09:27

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


このQ&Aを見た人がよく見るQ&A