Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencapai Kedudukan Tetingkap seperti Rainlendar dalam WPF?

Bagaimanakah Saya Boleh Mencapai Kedudukan Tetingkap seperti Rainlendar dalam WPF?

Mary-Kate Olsen
Lepaskan: 2024-12-31 12:41:10
asal
845 orang telah melayarinya

How Can I Achieve Rainlendar-like Window Positioning in WPF?

Penedudukan Tetingkap dalam WPF

Dalam WPF, anda boleh mengubah suai gelagat penentududukan tetingkap untuk mencapai kesan yang serupa dengan pilihan "pada desktop" Rainlendar. Begini caranya:

API SetParent

Untuk mencapai kesan "pada desktop", di mana tetingkap menjadi anak kepada desktop Explorer, anda boleh menggunakan API SetParent. API ini membolehkan anda menetapkan tetingkap induk pemegang tetingkap. Dengan menetapkan tetingkap induk kepada pemegang tetingkap desktop, anda boleh membenamkan tetingkap WPF anda dalam desktop.

SetWindowPos

Untuk kesan "di bawah", anda boleh menggunakan API SetWindowPos untuk meletakkan tetingkap WPF anda di bahagian bawah pesanan Z. Ini memastikan tetingkap anda kekal di bahagian bawah, walaupun apabila tetingkap lain dibuka dan ditutup.

WM_WINDOWPOSCHANGING

Untuk mengelakkan tetingkap anda daripada datang ke hadapan apabila diklik, anda boleh mengendalikan WM_WINDOWPOSCHANGING mesej. Mesej ini dihantar oleh sistem pengendalian Windows apabila kedudukan atau saiz tetingkap hampir berubah. Dengan mengendalikan mesej ini dan memintas perubahan, anda boleh memaksa tetingkap anda kekal di bahagian bawah pesanan Z.

Untuk melaksanakan ini dalam C#, anda perlu menggunakan kod berikut:

protected override void OnSourceInitialized(EventArgs e)
{
    _handle = new WindowInteropHelper(this).Handle;
    HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
    source.AddHook(WndProc);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == WM_WINDOWPOSCHANGING)
    {
        var pos = (WINDOWPOS)Marshal.PtrToStructure(lParam, typeof(WINDOWPOS));

        // Force the window to remain at the bottom of the Z-order
        pos.hwndInsertAfter = HWND_BOTTOM;

        Marshal.StructureToPtr(pos, lParam, false);
        handled = true;
    }

    return IntPtr.Zero;
}
Salin selepas log masuk

Dengan menggabungkan pengendalian mesej SetParent API, SetWindowPos dan WM_WINDOWPOSCHANGING, anda boleh mencapai kedua-dua "pada desktop" dan "pada kesan bawah" untuk tetingkap WPF anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Kedudukan Tetingkap seperti Rainlendar dalam WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan