Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencapai Peletakan Tetingkap 'Pada Desktop' dan 'Di Bawah' dalam WPF?

Bagaimanakah Saya Boleh Mencapai Peletakan Tetingkap 'Pada Desktop' dan 'Di Bawah' dalam WPF?

Linda Hamilton
Lepaskan: 2024-12-29 02:00:11
asal
966 orang telah melayarinya

How Can I Achieve

Kawalan Peletakan Tetingkap dalam WPF: Pilihan "Pada Desktop"

Keupayaan Rainlendar untuk meletakkan tetingkap "pada desktop" membolehkan mereka berkelakuan sebagai tetingkap paling bawah. Ini bukan ciri terbina dalam WPF, tetapi ia boleh dicapai menggunakan panggilan API Win32, yang memerlukan P/Invoke daripada C#.

Pilihan Rainlendar:

Rainlendar menawarkan dua pilihan untuk peletakan tingkap:

  • Hidup Desktop: Tetingkap menjadi anak kepada tetingkap desktop Explorer, sama seperti menetapkan induk menggunakan API SetParent.
  • Di Bawah: Tetingkap kekal di bahagian bawah Z -pesanan, tepat di atas desktop.

Mencapai Pada Desktop Peletakan:

Untuk meletakkan tetingkap WPF "pada desktop", anda boleh menggunakan SetParent API:

[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
Salin selepas log masuk

Menetapkan hWndNewParent kepada IntPtr.Zero mengalih keluar induk dan membuat tetingkap seorang kanak-kanak desktop.

Mencapai Di Bawah Peletakan:

Untuk memastikan tetingkap "di bawah", anda perlu memintas mesej WM_WINDOWPOSCHANGING:

protected override void WndProc(ref Message m)
{
    if (m.Msg == (int) WM.WINDOWPOSCHANGING)
    {
        var pos = (WINDOWPOS) Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));
        // Check if the window is being promoted to the top
        if ((pos.flags & SWP_NOMOVE) == 0 && (pos.flags & SWP_NOSIZE) == 0)
        {
            pos.hwndInsertAfter = HWND_BOTTOM;
            pos.flags |= SWP_NOACTIVATE;
            Marshal.StructureToPtr(pos, m.LParam, true);
        }
    }
    base.WndProc(ref m);
}
Salin selepas log masuk

Dengan menetapkan hwndInsertAfter kepada HWND_BOTTOM dan menambah bendera SWP_NOACTIVATE, tetingkap akan sentiasa kekal di bahagian bawah dan tidak akan diaktifkan apabila diklik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Peletakan Tetingkap 'Pada Desktop' dan 'Di Bawah' 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