Windowsフォームのサイズ固定 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 kmkm  (社会人)
投稿日時
2009/10/6 20:50:56
通りすがりの者ですが、brvさんの方法でやってみました。
うまく行きましたよ。やったのは高さ固定の方だけですが。
うまく行きましたよ。やったのは高さ固定の方だけですが。
Public Class Form1
Const WM_NCHITTEST As Integer = &H84
Dim HTBOTTOM As New IntPtr(15)
Dim HTTOP As New IntPtr(12)
Dim HTBOTTOMLEFT As New IntPtr(16)
Dim HTBOTTOMRIGHT As New IntPtr(17)
Dim HTTOPLEFT As New IntPtr(13)
Dim HTTOPRIGHT As New IntPtr(14)
Dim HTNOWHERE As New IntPtr(0)
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If m.Msg = WM_NCHITTEST Then
'Debug.Print(m.Result) '出力してみると楽しいです
If HTBOTTOM.Equals(m.Result) OrElse _
HTTOP.Equals(m.Result) OrElse _
HTBOTTOMLEFT.Equals(m.Result) OrElse _
HTBOTTOMRIGHT.Equals(m.Result) OrElse _
HTTOPLEFT.Equals(m.Result) OrElse _
HTTOPRIGHT.Equals(m.Result) Then
m.Result = HTNOWHERE
End If
End If
End Sub
End Class
投稿者 brv  (中学生)
投稿日時
2009/10/6 07:03:24
WndProcメソッドのオーバーライドをして、WM_NCHITTESTメッセージをうまく使うと解決できると思います。
WM_NCHITTESTメッセージは、システムがウインドウに「今マウスはどこにあるの?」と聞いてくるようなものなので、本来は「下の境界線上にありますよ~」というところを「クライアント領域内にありますよ~」などと答えを返してシステムをだますという方法です。未検証ですが、やってみてください。
Windowsメッセージの処理
http://blog.livedoor.jp/akf0/archives/51443822.html
WM_NCHITTEST
http://www.winapi-database.com/Message/WM/WM_NCHITTEST.html
WM_NCHITTESTメッセージは、システムがウインドウに「今マウスはどこにあるの?」と聞いてくるようなものなので、本来は「下の境界線上にありますよ~」というところを「クライアント領域内にありますよ~」などと答えを返してシステムをだますという方法です。未検証ですが、やってみてください。
Windowsメッセージの処理
http://blog.livedoor.jp/akf0/archives/51443822.html
WM_NCHITTEST
http://www.winapi-database.com/Message/WM/WM_NCHITTEST.html
投稿者 じょう  (社会人)
投稿日時
2009/10/6 01:51:44
るしぇさん
再度お返事ありがとうございます。
MouseMoveですか。
使ったことがないので少し調べてみましたが、難しそうでした。
でも頑張って試してみます。
もしMouseMoveについて分かりやすく解説しているサイト等ご存知でしたら教えていただけると嬉しいです。
再度お返事ありがとうございます。
MouseMoveですか。
使ったことがないので少し調べてみましたが、難しそうでした。
でも頑張って試してみます。
もしMouseMoveについて分かりやすく解説しているサイト等ご存知でしたら教えていただけると嬉しいです。
投稿者 るしぇ  (社会人)
投稿日時
2009/10/6 00:47:37
そうなると、FormBorderStyle は FixedDialog のままで
MouseMove あたりでプログラムからサイズ変更するような
コードを書いてみるとかかなぁ。
それなりにできるような気はするけど、基本は自アプリの
窓内の制御のみなので色々と多少ずれるかも。
MouseMove あたりでプログラムからサイズ変更するような
コードを書いてみるとかかなぁ。
それなりにできるような気はするけど、基本は自アプリの
窓内の制御のみなので色々と多少ずれるかも。
投稿者 じょう  (社会人)
投稿日時
2009/10/5 23:11:45
るしぇさん
早速の回答ありがとうございます。
MaximumSize, MinimumSizeを組み合わせて確かに固定は出来るのですが、変更しようとすると上下(もしくは左右)の矢印が出てしまいますよね?
その矢印も出したくないのです・・・。
早速の回答ありがとうございます。
MaximumSize, MinimumSizeを組み合わせて確かに固定は出来るのですが、変更しようとすると上下(もしくは左右)の矢印が出てしまいますよね?
その矢印も出したくないのです・・・。
投稿者 るしぇ  (社会人)
投稿日時
2009/10/5 22:57:16
サイズを固定する方法も含めて、
MaximumSize, MinimumSize プロパティを
うまく組み合わせて制御したらいいのでは?
MaximumSize, MinimumSize プロパティを
うまく組み合わせて制御したらいいのでは?
投稿者 じょう  (社会人)
投稿日時
2009/10/5 22:42:15
VB2005のWindowsフォームのサイズを固定する方法についての質問です。
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
でフォームのサイズを変更できないようにするという方法は分かりましたが、
縦幅のみ固定、横幅のみ固定という設定は可能でしょうか?
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
でフォームのサイズを変更できないようにするという方法は分かりましたが、
縦幅のみ固定、横幅のみ固定という設定は可能でしょうか?
回答ありがとうございます。
参考ページまで示してくださり助かります。
kmkmさん
回答ありがとうございます。
しかも本来自分でしなければいけない検証までしていただいて嬉しかったです。
ありがたくソースを使わせていただきます。
(もちろんもっと勉強します。)
回答をくださったみなさん、本当にありがとうございました。