LMAssuncao Ответов: 1

Расширение размера неклиентской области с помощью C#


Мне нужно расширить размер верхнего края клиентской области, чтобы ввести компоненты, не относящиеся к графическому интерфейсу, в это место. Я использую приведенный ниже код для этого, однако, повернув расширенный код области пустым, вы не получите прозрачность Windows 7 Professional, которая является ОС, которую я использую.
Я новичок в программировании и C # Windows API. Благодарю за внимание.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;

    namespace InstrumentalCsharp
    {
    public partial class WExplorerPadrao : Form
    {

        [StructLayout(LayoutKind.Sequential)]
        public struct MARGINS
        {
            public int cxLeftWidth;      // width of left border that retains  its size
            public int cxRightWidth;     // width of right border that retains its size
            public int cyTopHeight;      // height of top border that retains its size
            public int cyBottomHeight;   // height of bottom border that retains its size
        };

    [DllImport("dwmapi.dll", PreserveSig = false)]
    public static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref     MARGINS margins);

    [DllImport("dwmapi.dll", PreserveSig = false)]
    public static extern bool DwmIsCompositionEnabled();


        public WExplorerPadrao()
        {
            InitializeComponent();
        }

    protected void WExplorerPadrao_Load(object sender, System.EventArgs e)
        {
            WExplorerPadrao.MARGINS margins = new WExplorerPadrao.MARGINS();
            margins.cxLeftWidth = 0;
            margins.cxRightWidth = 0;
            margins.cyTopHeight = 20;
            margins.cyBottomHeight = 0;
            IntPtr hwnd = this.Handle;
            WExplorerPadrao.DwmExtendFrameIntoClientArea(hwnd, ref margins);
        }
    }
}


Что я уже пробовал:

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

1 Ответов

Рейтинг:
1

#realJSOP

Вы не можете "расширить размер неклиентской области". Но вы можете расположить окно вне видимого экрана. Просто установите положение окна "неклиентская область" в отрицательную координату Y и убедитесь, что высота окна соответствует. Таким образом,если ваше окно расположено на 0, -100, то высота вашего окна должна быть больше, чем Math.Abs(pos.Y).

Наконец, установите, чтобы ваше окно не появлялось на панели задач (если это необходимо).