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:
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);
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); }
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!