Minimize edilmiş dan WindowState Restore

oy
26

önceki durumuna bir küçültülmüş bir form geri yüklemek için kolay bir yöntem, ya Normal veya En büyük var mı? Ben görev çubuğunu tıklayarak (veya sağ tıklayarak ve geri yükleme seçme) ile aynı özelliğe bekliyorum.

Şimdiye kadar bu var, ama formu daha önce maksimize edilmiş, yine de geri normal pencere olarak gelir.

if (docView.WindowState == FormWindowState.Minimized)
    docView.WindowState = FormWindowState.Normal;

Ben önceki halini hatırlamak şeklinde devlet değişikliği kaldırabilecek var mı?

Oluştur 09/12/2008 saat 23:16
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
32

Aşağıdaki uzantısı yöntemi kullanılmaktadır:

using System.Runtime.InteropServices;

namespace System.Windows.Forms
{
    public static class Extensions
    {
        [DllImport( "user32.dll" )]
        private static extern int ShowWindow( IntPtr hWnd, uint Msg );

        private const uint SW_RESTORE = 0x09;

        public static void Restore( this Form form )
        {
            if (form.WindowState == FormWindowState.Minimized)
            {
                ShowWindow(form.Handle, SW_RESTORE);
            }
        }
    }
}

Sonra diyoruz form.Restore()benim kodunda.

Cevap 27/04/2010 saat 22:20
kaynak kullanıcı

oy
11

Normal durumudur en kolay yolu bir form geri:

if (MyForm.WindowState == FormWindowState.Minimized)
{
    MyForm.WindowState = FormWindowState.Normal;
}
Cevap 24/02/2015 saat 13:26
kaynak kullanıcı

oy
4

Böyle görev çubuğu düğmesine tıklayarak taklit olabilir:

SendMessage(docView.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
Cevap 09/12/2008 saat 23:31
kaynak kullanıcı

oy
3

Benim için kod yukarıdaki ÇALIŞMAZLAR.

Ama sonunda ben çalışıyorum kod buldum. İşte burada:

CxImports.ManagedWindowPlacement placement = new CxImports.ManagedWindowPlacement();
CxImports.GetWindowPlacement(Convert.ToUInt32(Handle.ToInt64()), placement);

if (placement.flags == CxImports.WPF_RESTORETOMAXIMIZED)
    WindowState = FormWindowState.Maximized;
else
    WindowState = FormWindowState.Normal;

Ben basit googling tarafından tüm gerekli "ithal" işlevlerini bulabilirsiniz, sanırım.

Cevap 09/09/2009 saat 11:55
kaynak kullanıcı

oy
1

Herkes diğer uygulamalar pencereli bunun nasıl merak, bu kod benim için çalışıyor:

    public void UnMinimize(IntPtr handle)
    {
        WINDOWPLACEMENT WinPlacement = new WINDOWPLACEMENT();
        GetWindowPlacement(handle, out WinPlacement);
        if(WinPlacement.flags.HasFlag(WINDOWPLACEMENT.Flags.WPF_RESTORETOMAXIMIZED))
        {
            ShowWindow(handle, (int)SW_MAXIMIZE);
        }
        else
        {
            ShowWindow(handle, (int)SW_RESTORE);
        }
    }

Stuff burada:

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public Int32 Left;
    public Int32 Top;
    public Int32 Right;
    public Int32 Bottom;
}

public struct POINT
{
    public int x;
    public int y;
}

public struct WINDOWPLACEMENT
{

    [Flags]
    public enum Flags : uint
    {
        WPF_ASYNCWINDOWPLACEMENT = 0x0004,
        WPF_RESTORETOMAXIMIZED = 0x0002,
        WPF_SETMINPOSITION = 0x0001
    }


    /// <summary>
    /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT).
    /// </summary>
    public uint length;
    /// <summary>
    /// The flags that control the position of the minimized window and the method by which the window is restored. This member can be one or more of the following values.
    /// </summary>
    /// 
    public Flags flags;//uint flags;
                       /// <summary>
                       /// The current show state of the window. This member can be one of the following values.
                       /// </summary>
    public uint showCmd;
    /// <summary>
    /// The coordinates of the window's upper-left corner when the window is minimized.
    /// </summary>
    public POINT ptMinPosition;
    /// <summary>
    /// The coordinates of the window's upper-left corner when the window is maximized.
    /// </summary>
    public POINT ptMaxPosition;
    /// <summary>
    /// The window's coordinates when the window is in the restored position.
    /// </summary>
    public RECT rcNormalPosition;
}

public class UnMinimizeClass
{
    [DllImport("user32.dll")]
    public static extern bool GetWindowPlacement(IntPtr hWnd, out WINDOWPLACEMENT lpwndpl);

    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    const int SW_MAXIMIZE = 3;
    const int SW_RESTORE = 9;

    public static void UnMinimize(IntPtr handle)
    {
        WINDOWPLACEMENT WinPlacement = new WINDOWPLACEMENT();
        GetWindowPlacement(handle, out WinPlacement);
        if (WinPlacement.flags.HasFlag(WINDOWPLACEMENT.Flags.WPF_RESTORETOMAXIMIZED))
        {
            ShowWindow(handle, SW_MAXIMIZE);
        }
        else
        {
            ShowWindow(handle, (int)SW_RESTORE);
        }
    }
}
Cevap 07/07/2018 saat 00:35
kaynak kullanıcı

oy
-1

Yukarıdaki kod oldukça tüm durumlarda benim için işe yaramadı

bayrakları kontrol ettikten sonra ben de = 3 showcmd kontrol etmek ve böylece başka maksimize eğer geri

Cevap 15/09/2016 saat 09:04
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more