2011-05-07 10 views
0

私は、カスタム特大のタイトルバーを描くために私の形でCreateParamsをプロパティをオーバーライドしています:タイトルバーを削除しますが、コントロールボックスは保持しますか?

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams 
    Get 
     CreateParams = MyBase.CreateParams 
     CreateParams.Style = CInt(CreateParams.Style And Not &HC00000L) 'WS_CAPTION 
    End Get 
End Property 

をそして私は、フォームをドラッグできるようにするためにWndProcをオーバーライドしてきました:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    MyBase.WndProc(m) 

    If m.Msg = &H84 AndAlso m.Result.ToInt32() = 1 Then m.Result = New IntPtr(2) 
End Sub 

しかし、制御ボックス(閉じて最小化)が消えます。コントロールボックスとテキストをタスクバーに保存する方法はありますか?通常のタイトルは削除しますか?

答えて

2

私が正しく理解していれば、あなたはタイトルバーからタイトルを隠したいのですが、Vista/7エクスプローラウィンドウのようにタスクバーから隠すことはできません。

これはあなたを助ける必要があります。 MSDN Forums 使用this methodお好みWTA_OPTIONSで(0x03のはずです)pvAttributeに。

+0

これは、DWM合成が有効な場合にのみ機能します。無効になっている場合(またはユーザーがWindows XP上で実行している場合)には、処理を異なる方法で行うコードを組み込む必要があります。 –

+0

はい、既に管理しています。ありがとう、完璧に動作します! – Ryan

+0

ああ、申し訳ありませんが、私はそれを言うのを忘れていました。これはエアロオンリー(エアロ基本)機能です。 – seri

1

クライアント以外の領域を自分で描画することを選択したら、すべてを描画する必要があります。ハイブリッドオプションはありません。

0

作成パラメータをオーバーロードして、タイトルバーなしのウィンドウを取得します。 WM_NCHITTESTのサポートが正しく実装されているため、ユーザーがウィンドウを移動する別の方法はありません。

この動作を行うには、CreateParamsを上書きする必要はありません。 ControlBoxプロパティをFalseに設定するだけで、Textプロパティは空の文字列に設定されます。あなたが望むものは推測するのが難しいです。タイトルバーのボタンを紛失したくない場合は、ControlBoxをFalseに設定しないでください。 「珍しいタイトル」は推測するのが非常に難しく、Textプロパティの価値だけが見えます。タイトルが不要な場合は、空の文字列に設定します。

+0

テキストをタスクバーに表示したいので、Textを空文字列に設定しても機能しません。もちろん、私はコントロールボックスを保持したい、私は私の質問でそう言った、なぜ私はコントロールボックスを偽に設定するだろうか?私はあなたが誤解していると思う - 私はタイトルバーを削除するために私は自分のタイトルバー、イメージとカスタムフォントで描画することができます作成​​パラメータをオーバーライドします。 – Ryan

+0

さて、フォームのOnPaint()メソッドをオーバーライドするだけで、必要なタイトルを描画するだけです。あなたはそれが奇妙に見える必要はなく、あなたがそれを望むように見えるようにすることができます。最小化ボタンと閉じるボタンのために独自のグリフを描画する必要があります.OpenPaint()メソッドのe.Graphics.DrawImageがそれを行います。 OnMouseDownオーバーライドでヒットテストを行う必要があるため、ユーザーはボタンをクリックしようとしているのを見ることができます。または、通常のボタンを使用します。 –

+0

コントロールボックスを閉じたままにしたい(閉じると最小にする)。 – Ryan

関連する問題