>백엔드 개발 >C++ >WPF에서 Rainlendar와 같은 창 위치 지정을 어떻게 얻을 수 있습니까?

WPF에서 Rainlendar와 같은 창 위치 지정을 어떻게 얻을 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-31 12:41:10844검색

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

WPF의 창 위치 지정

WPF에서는 창의 위치 지정 동작을 수정하여 Rainlendar의 "데스크톱에서" 옵션과 유사한 효과를 얻을 수 있습니다. 방법은 다음과 같습니다.

SetParent API

창이 Explorer 데스크탑의 하위 항목이 되는 "데스크톱에서" 효과를 얻으려면 SetParent API를 사용할 수 있습니다. 이 API를 사용하면 창 핸들의 상위 창을 설정할 수 있습니다. 상위 창을 데스크톱 창 핸들로 설정하면 WPF 창을 데스크톱에 포함할 수 있습니다.

SetWindowPos

"하단" 효과의 경우 SetWindowPos API를 사용하여 위치를 지정할 수 있습니다. WPF 창은 Z 순서 맨 아래에 있습니다. 이렇게 하면 다른 창을 열고 닫아도 창이 맨 아래에 유지됩니다.

WM_WINDOWPOSCHANGING

클릭할 때 창이 앞으로 나오지 않도록 하려면 WM_WINDOWPOSCHANGING 메시지입니다. 이 메시지는 창의 위치나 크기가 변경되려고 할 때 Windows 운영 체제에서 전송됩니다. 이 메시지를 처리하고 변경 사항을 가로채면 창이 Z 순서의 맨 아래에 유지되도록 할 수 있습니다.

이를 C#에서 구현하려면 다음 코드를 사용해야 합니다.

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;
}

SetParent API, SetWindowPos 및 WM_WINDOWPOSCHANGING 메시지 처리를 결합하면 "데스크톱에서" 및 "하단에서" 효과를 모두 얻을 수 있습니다. WPF 창을 위한 것입니다.

위 내용은 WPF에서 Rainlendar와 같은 창 위치 지정을 어떻게 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.