> 백엔드 개발 > C++ > WPF에서 '데스크탑에' 및 '하단에' 창 배치를 어떻게 달성할 수 있습니까?

WPF에서 '데스크탑에' 및 '하단에' 창 배치를 어떻게 달성할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-29 02:00:11
원래의
966명이 탐색했습니다.

How Can I Achieve

WPF의 창 배치 제어: "데스크톱에서" 옵션

Rainlendar의 창을 "데스크톱에" 배치하는 기능을 사용하면 대부분의 창처럼 작동할 수 있습니다. 이는 WPF에 내장된 기능은 아니지만 C#에서 P/Invoke가 필요한 Win32 API 호출을 사용하여 구현할 수 있습니다.

Rainlendar의 옵션:

Rainlendar는 창 배치를 위한 두 가지 옵션을 제공합니다:

  • 켜기 데스크탑: 창은 SetParent API를 사용하여 상위 창을 설정하는 것과 유사하게 Explorer 데스크탑 창의 하위가 됩니다.
  • 하단: 창은 Z 창 하단에 남아 있습니다. -주문, 데스크탑 바로 위.

데스크탑에서 달성 배치:

WPF 창을 "데스크탑에" 배치하려면 SetParent API를 사용할 수 있습니다.

[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
로그인 후 복사

hWndNewParent를 IntPtr.Zero로 설정하면 상위 항목이 제거되고 창이 만들어집니다. 데스크톱 어린이.

최저 달성 배치:

창을 "하단"에 유지하려면 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);
}
로그인 후 복사

hwndInsertAfter를 HWND_BOTTOM으로 설정하고 SWP_NOACTIVATE 플래그를 추가하면 창 항상 하단에 남아 있으며 클릭해도 활성화되지 않습니다.

위 내용은 WPF에서 '데스크탑에' 및 '하단에' 창 배치를 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿