Ограничить поведение при запуске формы - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть экран запуска в приложении, который я хочу показать с StartupPosition = CenterScreen и WindowState = Normal.Все работает нормально, но если, например, пользователь создает ярлык для моего приложения и устанавливает Run = Maximized, тогда экран запуска становится максимальным вместо нормального, и я хочу отключить это поведение.Есть ли способ полностью отключить форму от максимизации или переопределить состояние запуска, данное приложению?

Я пытался принудительно запустить StartupPosition и WindowState, но это не работает, так как окно просто заканчивается в верхнейСлева от экрана.

Делая некоторые тесты, я нашел 2 способа отключить максимизацию окна из-за Run = Maximized при запуске: A) показать фиктивную форму, закрыть ее, затем загрузить фактическую форму запуска B)добавьте следующую форму: Form.Load:

if (WindowState != FormWindowState.Normal)
{
    WindowState = FormWindowState.Normal;
    Rectangle r = Screen.GetWorkingArea(this);
    Location = new Point(r.X + ((r.Width - Width) / 2), r.Y + ((r.Height - Height) / 2));
}

Я знаю, что должен быть действительный метод отключения максимизации запуска от максимизации, потому что, если я показываю окно сообщения перед моей формой запуска, окно сообщения отображается нормально изатем моя форма запуска, но без отображения окна сообщения мой экран запуска хочет быть развернутым.

1 Ответ

0 голосов
/ 06 февраля 2019

Спасибо, @LarsTech!Ответ был где-то между Приложение застряло в полноэкранном режиме? и решением @ Jimi.Преимущество состоит в том, что это отключает Run = Maximized без отключения Run = Minimized.

using System.Runtime.InteropServices;
public partial class frmStartup : Form
{
    public frmStartup()
    {
        InitializeComponent();
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x46) // WM_WINDOWPOSCHANGING
        {
            var wpos = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));
            wpos.flags |= 0x0001; // Turn on SWP_NOSIZE
            Marshal.StructureToPtr(wpos, m.LParam, false);
        }
        base.WndProc(ref m);
    }
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private struct WINDOWPOS
    {
        public IntPtr hwnd, hwndInsertAfter;
        public int x, y, cx, cy;
        public int flags;
    }

    private void frmStartup_Load(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Maximized)
        {
            WindowState = FormWindowState.Normal;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...