- PR -

Messengerのような画面制御について

投稿者投稿内容
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-06-13 20:09
引用:

しかし、そのタイミングで
 ・HTRIGHT
 ・HTLEFT
を返してもマウスが「⇔」に変わりますが、フォームのサイズが変更しませんでした。



前の投稿では、

引用:

コントロールのサイズ変更したいときには
そのコントロールのWndProcでHTTOPやHTRIGHTなどを返せばいいんです。



と書きました。
「その」
というのが重要で。

つまり、サイズを変更したいコントロールやフォームの
WndProcで返さないといけない、ということです。

ピクチャボックスコントロールのWndProcで返してもだめです。
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2007-06-13 21:59
れいさん、いつも回答ありがとうございます。


>ピクチャボックスコントロールのWndProcで返してもだめです。

やはりそうなんですね。。。


今までのやり取りをまとめると、私が作成しようとしているフォームでは、WndProcだけでやりたい事を行えないという事になりますよね?

ですので、違う方法で対応できるか検討してみます。
でも、WndProcをオーバーライドしてこのような処理ができる事を知れたので、とてもいい勉強になりました。


どうもありがとうございましたm(__)m
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-06-14 03:49
引用:

extreamさんの書き込み (2007-06-13 21:59) より:
今までのやり取りをまとめると、私が作成しようとしているフォームでは、WndProcだけでやりたい事を行えないという事になりますよね?



いいえ。
FormのWndProcおよび、
PictureBoxを継承しWndProcだけOverrideしたコントロールだけでできます。

参考のつもりでヒットテストの戻り値や
「操作透過」などのキーワードを並べておいたつもりですが…。

このまま「解決策なし」で終わるとつまらないので、
解決案の一例を。

コード:
Public Class HitTransPictureBox
    Inherits PictureBox

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If Me.DesignMode Then MyBase.WndProc(m) : Exit Sub
        Select Case m.Msg
            Case WM_NCHITTEST
                m.Result = HTTRANSPARENT
                Return
        End Select
        MyBase.WndProc(m)
    End Sub
End Class



このHitTransPictureBoxは、全てのヒットテストを透過します。

昔はこういった手法で操作透過する透明な窓を作りました。

extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2007-06-14 09:49
れいさん、いつも回答ありがとうございます。


>このまま「解決策なし」で終わるとつまらないので

私の経験が浅くて申し訳ありません。
今まで継承などはほとんどやった事がなく、理解するのに時間がかかるかと思ったのでこのやり方をあきらめようと思っていました。

本日は時間に余裕がないので、教えていただいた方法を参考にして確認できましたら、再度報告させていただきます。


いつも丁寧なアドバイスありがとうございます。
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2007-06-15 10:24
こんにちは。


れいさんに教えていただいた方法で継承コントロールを作成したところ、全てのヒットテストを透過するコントロールを作成することができました。
これにより、フォーム端にあるコントロール上で
 ・フォームの移動
 ・フォームサイズの変更
が行えるようになりました。

最初に自分で考えていた方法では、座標値を計算してLocationを変えたり、マウス形状を変えたりしていたため、チラつきが気になるものとなっていましたが、教えていただいた方法に置き換えることで、際立てチラつくところはなくなったように思えます。


このようにWndProcをオーバーライドして処理を行うという発想をしたことがなかったので、非常に勉強になりました。
本当にありがとうございました m(__)m

スキルアップ/キャリアアップ(JOB@IT)