C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: フォームのコントロールボックスを使う


(過去ログ 67 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■39043 / inTopicNo.1)  フォームのコントロールボックスを使う
  
□投稿者/ hs (109回)-(2009/07/29(Wed) 17:42:14)

分類:[.NET 全般] 

VS2008-VB

いつもお世話になっております。

現在、FormBorderStyle = Windows.Forms.FormBorderStyle.None のフォームを作成しております。
当然この場合フォームのサイズ調整ができない、コントロールボックス(最小・最大・閉じる)が使えない。

しかし、Windows.Forms.FormBorderStyle.None の状態でサイズ調整が行えて、かつコントロールボックスを使いたいと思っています。
この状態でフォームサイズの調整ができる手法は下記サイトで見つけれたのですが。
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=8372&reno=8222&oya=8209&mode=msgview&page=0

なんとかフォームのコントロールボックスを単独で使用できる手法はないものかと考えております。

よろしくお願いいたします。
引用返信 編集キー/
■39044 / inTopicNo.2)  Re[1]: フォームのコントロールボックスを使う
□投稿者/ aetos (189回)-(2009/07/29(Wed) 18:20:35)
aetos さんの Web サイト
No39043 (hs さん) に返信

それならどうして FormBorderStyle を None にしてるんです?
引用返信 編集キー/
■39046 / inTopicNo.3)  Re[2]: フォームのコントロールボックスを使う
□投稿者/ ぽぴ王子 (448回)-(2009/07/29(Wed) 18:30:49)
ぽぴ王子 さんの Web サイト
またムチャなこと言ってくるなあ…

FormBorderStyle が Sizable と同等の状態で、なおかつウィンドウの枠は出さないという
ことですか?

私も aetos さんと同じで、なぜ FormBoderStyle を None にしているのか、がわからないです。
ウィンドウの枠を出したくないということなのだとしても、なぜ出したくないのか?から疑問
なので、その辺は素直な疑問です。

僕もそんなに詳しいわけじゃないですが、Sizable の時の枠って「ここはサイズ変更可能なところ
なんだよ!」という意味でついているんだと思っています。ところがそれを無くしたいということは
何らかの理由があるはずですよね。Windows の UI に逆らってまでなんとかしたい理由というものが。
ちょっとそれを教えていただきたいなと。

ちなみにやろうとした場合、FormBoderStyle を Sizable にして、無理矢理ウィンドウの枠を表示
しないようにするとか(できるのかどうかはともかく)、FormBoderStyle は None のままにして
コントロールボックスやフォームサイズの変更部分を自前でなんとかするか(リンク先の方法に
近いと思います)ぐらいしか思い浮かびませんでした。
自分がそういったことをしろと言われたら「できません」と言って泣きを入れます。たいてい
そういったインターフェースってのは、何も考えずに「これカッコイイ!」とか言って提案した
ものだったりして、仕様レベルで覆せるものだったりすることが多いので。
引用返信 編集キー/
■39048 / inTopicNo.4)  Re[3]: フォームのコントロールボックスを使う
□投稿者/ hs (110回)-(2009/07/29(Wed) 19:09:20)
No39044 (aetos さん) に変身
> それならどうして FormBorderStyle を None にしてるんです?

タイトルバーのキャブション部分が不要だからです。
逆に言うとその部分ぐらい我慢すればよいのでしょうし、それだけのために無駄なコードを何行も記述しなければならないですし、
ただ、そこがどうしても妥協できない部分なのです。
イメージで言うとApple社のiTunesやSkypeのキャプション部分にメインメニューがある、あのイメージを実現したいだけなのですが...;

No39046 (ぽぴ王子 さん) に返信
> 自分がそういったことをしろと言われたら「できません」と言って泣きを入れます。

今回は、自分がやりたいと思っている事なのです。

> たいていそういったインターフェースってのは、何も考えずに「これカッコイイ!」とか言って提案した
> ものだったりして

恥ずかしながら、そのとおりです;

> 仕様レベルで覆せるものだったりすることが多いので。

VSを初めて約5か月になります。今まではAccessで社内向けのシステムを担当していてデザインとか正直二の次の仕事をしてきました。
VS2008が凄いのかわかりませんが、Accessでできない事が、簡単に実現できる様になって、何でもやってみたくなるんです;
また、今回開発しているシステムの対象ユーザーは、中学生から高校生で、インターフェイスには高校生の意見を参考にデザインしています。

もし今回の質問が実現可能であれば、ご教授よろしくおねがいします。
引用返信 編集キー/
■39050 / inTopicNo.5)  Re[4]: フォームのコントロールボックスを使う
□投稿者/ こうへい (1回)-(2009/07/29(Wed) 19:47:00)
FormBorderStyle を Sizable にして
タイトルバー(やWindowの枠)は Form.Region で隠す
右上にボタンを3つ置いてそれぞれの動作は自前で実装する
ってのをやった事があります
引用返信 編集キー/
■39052 / inTopicNo.6)  Re[4]: フォームのコントロールボックスを使う
□投稿者/ まどか (614回)-(2009/07/29(Wed) 19:51:55)
ボーダー無しにこだわるなら、フォームにボタン貼り付けるだけでいいような。
見た目をそれっぽくなら、そのボタンをオーナードローで自分で描画すると。

引用返信 編集キー/
■39053 / inTopicNo.7)  Re[5]: フォームのコントロールボックスを使う
□投稿者/ やじゅ (1151回)-(2009/07/29(Wed) 20:04:35)
やじゅ さんの Web サイト
No39043 (hs さん) に返信

C# フォームとボタンの形を変えたメディアプレーヤを利用したサンプル
http://blogs.dion.ne.jp/tmami/archives/4385873.html

ウィンドウ(フォーム)の形を変えるには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/205nonrecwin/nonrecwin.html


それと、以前質問していた何件かは解決したのでしょうか? ほっときですか?

引用返信 編集キー/
■39054 / inTopicNo.8)  Re[4]: フォームのコントロールボックスを使う
□投稿者/ 渋木宏明(ひどり) (1191回)-(2009/07/29(Wed) 20:06:13)
渋木宏明(ひどり) さんの Web サイト
> もし今回の質問が実現可能であれば、ご教授よろしくおねがいします。

要件として「デザイン優先」てのがあるなら止めはしないけど、プロパティの設定程度で簡単に出来たりはしないですよ。

FormBorderStyle = Windows.Forms.FormBorderStyle.None;

とした以上、都合良くコントロールボックスだけを使用するなんてことはできません。

GetSystemMenu() API でシステムメニューが取得できるので、それを TrackPopupMenu() や TrackPopupMenuEx() API で表示すればよろしんじゃないでしょうか。

コントロールボックスの身代わりには、PictureBox とかでいいんじゃないでしょうか。(通常のボタンみたいにクリックした時へこむ必要ないし)
引用返信 編集キー/
■39057 / inTopicNo.9)  Re[4]: フォームのコントロールボックスを使う
□投稿者/ 魔界の仮面弁士 (1172回)-(2009/07/29(Wed) 20:50:09)
2009/07/29(Wed) 21:06:41 編集(投稿者)
# しまった。。。この実装方法だと、最大化すると困った事になる…。

■No39048 (hs さん) に返信
> タイトルバーのキャブション部分が不要だからです。

サイズ変更可能なまま、タイトルバーを消してみました。
単にリージョンを切っただけなので、上方向へのリサイズができないという手抜き実装ですが。


' %WINDIR%\Microsoft.NET\Framework\v3.5\VBC.EXE /T:WINEXE SAMPLE.VB
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D
Public Class Form1 : Inherits Form
  Public Shared Sub Main()
    Application.Run(New Form1())
  End Sub
  Private Declare Auto Function SendMessage Lib "user32" _
    (ByVal hWnd As IntPtr, ByVal message As Integer,  _
     ByVal wParam As Integer, ByVal lParam As Integer) As Integer
  Private oldRegion As Region
  Private Sub Form1_Load() Handles MyBase.Load
    oldRegion = Me.Region()
    Dim q = Aggregate scr In Screen.AllScreens Into _
        L = Min(scr.Bounds.Left), _
        T = Min(scr.Bounds.Top), _
        B = Max(scr.Bounds.Bottom), _
        R = Max(scr.Bounds.Right)
    Dim offset = Me.RectangleToScreen(Me.ClientRectangle).Top - Me.Top
    Dim fullScreenSize As New Rectangle(q.L, q.T + offset, q.R - q.L, q.B - q.T - offset)
    Using path As New GraphicsPath()
      path.AddRectangle(fullScreenSize)
      Me.Region = New Region(path)
    End Using
    Dim btn As New Button() With { .Text = "★" }
    AddHandler btn.Click, Function() SendMessage(Handle, &H313, 0, Cursor.Position.X Or Cursor.Position.Y * &H10000)
    Controls.Add(btn)
  End Sub
  Private Sub Form1_FormClosing() Handles Me.FormClosing
    Hide()
    Using r As Region = Me.Region
      Me.Region = oldRegion
    End Using
  End Sub
End Class

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -