0

私の顧客は、デフォルトの maximise-buttons 機能を変更して、顧客が持っているすべての画面でフォームを最大化することを望んでいます。フォームを配置する正しい四角形を測定するコードを既に書いていますが、それをフォームの MaximisedBounds 属性に割り当てると、いくつかの問題があります。クリックする前は 1 つのペイントしか得られません。別の画面でフォームをクリックすると、フォームの「下」をクリックしてその下の次のウィンドウに移動したようになります。

もちろん、この問題を解決する方法は他にもあります (ウィンドウが最大化/非最大化されたときのイベントのように)。MaximizedBounds 属性を変更して機能させる前に何かすることはありますか?

4

2 に答える 2

0

Size値ではなくプロパティを直接設定することで、2つの画面全体にフォームを入力することができましたMaximisedBounds

于 2010-02-01T17:06:26.690 に答える
0

私はマットに同意します。「MaximizedBounds」を設定することはお勧めできません。ウィンドウが最大化/最大化解除されたときのイベント に書かれているように、WndProc メソッドをオーバーライドします。そこでは、ウィンドウから受け取ったさまざまなコマンドを自分で処理できます。

主に行うべきことは、"SC_MAXIMIZE"-windowcommand 用の独自のコードを作成することです (上記の参照記事に記載されているとおり)。そこで、フォームのサイズを手動で設定できます。たとえば、この場合、フォームは実際には最大化されません。実際には、まだ通常の WindowState のままです。ユーザーがこの状態を変更できないようにするには、他のウィンドウ コマンドを「キャッチ」する必要があります。

オーバーライドされた WndProc メソッドは次のようになります。

    protected override void WndProc(ref Message m)
    {
        if(m.Msg == 0x0112) // WM_SYSCOMMAND
        {
            if(m.WParam == new IntPtr(0xF012)) //TITLE_CLICK_ONCE
            {
                // catch, this command can occur, when form starts to move
            }

            if(m.WParam == new IntPtr(0xF001) // RESIZE_ON_EDGE
            || m.WParam == new IntPtr(0xF002)
            || m.WParam == new IntPtr(0xF003)
            || m.WParam == new IntPtr(0xF004)
            || m.WParam == new IntPtr(0xF005)
            || m.WParam == new IntPtr(0xF006)
            || m.WParam == new IntPtr(0xF007)
            || m.WParam == new IntPtr(0xF008))
            {
                // catch the resizing
            }

            if(m.WParam == new IntPtr(0xF032)) // SECOND_CLICK_ON_TITLEBAR
            {
                // catch. causes a maximization (or resuming to normal window-mode)
            }

            if(m.WParam == new IntPtr(0xF030)) //SC_MAXIMIZE
            {
                // the actual point, where to enter your code
                // this command occurs, when the "Maximize"-button is pressed
            }
        }

        // maybe abort calling of the base-method at specified window-commands,
        // when you want to make your own code by simply "return;"
        base.WndProc(ref m);
    }
于 2010-02-02T17:30:18.380 に答える