다음을 통해 공유


IWindowNative::get_WindowHandle 메서드(microsoft.ui.xaml.window.h)

IWindowNative를 구현하는 개체가 나타내는 창의 창 핸들(HWND)을 검색합니다.

자세한 정보 및 코드 예제는 창 핸들 검색(HWND)을 참조하세요.

구문

HRESULT get_WindowHandle(
  HWND *hWnd
);

매개 변수

hWnd

창 핸들(HWND)입니다.

반환 값

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

예제

이 예제와 함께 다음을 수행하기 전에 다음 topics 검토합니다.

사용자 지정된 창 아이콘

이 예제에서는 기본 창의 HWND(창 핸들)를 검색하고 이를 사용하여 창의 제목 표시줄과 해당 콘텐츠를 사용자 지정하는 방법을 보여 줍니다.

새 프로젝트 만들기

  1. Visual Studio의 빈 앱 패키지(데스크톱의 WinUI 3) 프로젝트 템플릿에서 새 C# 또는 C++/WinRT 프로젝트를 만듭니다.

MainWindow.xaml

참고

이 연습에서 사용할 아이콘 파일이 필요한 경우 WirelessHostednetwork 샘플 앱에서 파일을 다운로드 computer.ico 할 수 있습니다. 폴더에 Assets 해당 파일을 배치하고 프로젝트에 콘텐츠를 추가합니다. 그런 다음 URL Assets/computer.ico을 사용하여 파일을 참조할 수 있습니다.

그렇지 않으면 이미 있는 아이콘 파일을 자유롭게 사용하고 아래 코드 목록에서 두 참조를 변경할 수 있습니다.

  1. 아래 코드 목록에서 두 개의 단추를 추가하고 각각에 대해 Click 처리기를 지정했음을 알 MainWindow.xaml 수 있습니다. 첫 번째 단추(basicButton_Click대한 클릭 처리기에서 제목 표시줄 아이콘 및 텍스트를 설정합니다. 두 번째(customButton_Click)에서는 제목 표시줄을 customTitleBarPanel이라는 StackPanel의 콘텐츠로 바꿔 보다 중요한 사용자 지정을 보여 줍니다.
<Window
    x:Class="window_titlebar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:window_titlebar"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid x:Name="rootElement" RowDefinitions="100, *, 100, *">

        <StackPanel x:Name="customTitleBarPanel" Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Top" Visibility="Collapsed">
            <Image Source="Images/windowIcon.gif" />
            <TextBlock VerticalAlignment="Center" Text="Full customization of title bar"/>
        </StackPanel>

        <StackPanel x:Name="buttonPanel"  Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
            <Button x:Name="basicButton" Click="basicButton_Click" Margin="25">Set the Window title and icon</Button>
            <Button x:Name="customButton" Click="customButton_Click" Margin="25">Customize the window title bar</Button>
        </StackPanel>

    </Grid>
</Window>

MainWindow.xaml.cs/cpp

  1. 사용자 지정 제목 표시줄을 숨기기 위해 basicButton_Click 처리기에 대한 아래 코드 목록에서 customTitleBarPanelStackPanel을 축소하고 ExtendsContentIntoTitleBar 속성을 false로 설정합니다.
  2. 그런 다음, IWindowNative::get_WindowHandle(C#의 경우 interop 도우미 메서드 GetWindowHandle 사용)을 호출하여 기본 창의 창 핸들(HWND)을 검색합니다.
  3. 다음으로 LoadImageSendMessage 함수를 호출하여 애플리케이션 아이콘(C#의 경우 PInvoke.User32 NuGet 패키지 사용)을 설정합니다.
  4. 마지막으로 SetWindowText 를 호출하여 제목 표시줄 문자열을 업데이트합니다.
private void basicButton_Click(object sender, RoutedEventArgs e)
{
    // Ensure the custom title bar content is not displayed.
    customTitleBarPanel.Visibility = Visibility.Collapsed;

    // Disable custom title bar content.
    ExtendsContentIntoTitleBar = false;

    //Get the Window's HWND
    var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);

    IntPtr hIcon = PInvoke.User32.LoadImage(
        IntPtr.Zero,
        "Images/windowIcon.ico",
        PInvoke.User32.ImageType.IMAGE_ICON,
        20, 20,
        PInvoke.User32.LoadImageFlags.LR_LOADFROMFILE);

    PInvoke.User32.SendMessage(
        hwnd,
        PInvoke.User32.WindowMessage.WM_SETICON,
        (IntPtr)0,
        hIcon);

    PInvoke.User32.SetWindowText(hwnd, "Basic customization of title bar");
}
// pch.h
...
#include <microsoft.ui.xaml.window.h>
...

// MainWindow.xaml.h
...
void basicButton_Click(Windows::Foundation::IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& args);
...

// MainWindow.xaml.cpp
void MainWindow::basicButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    // Ensure the that custom title bar content is not displayed.
    customTitleBarPanel().Visibility(Visibility::Collapsed);

    // Disable custom title bar content.
    ExtendsContentIntoTitleBar(false);

    // Get the window's HWND
    auto windowNative{ this->m_inner.as<::IWindowNative>() };
    HWND hWnd{ 0 };
    windowNative->get_WindowHandle(&hWnd);

    HICON icon{ reinterpret_cast<HICON>(::LoadImage(nullptr, L"Assets/computer.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE)) };
    ::SendMessage(hWnd, WM_SETICON, 0, (LPARAM)icon);

    this->Title(L"Basic customization of title bar");
}
  1. customButton_Click 처리기에서 customTitleBarPanelStackPanel의 표시 유형을 Visible로 설정합니다.
  2. 그런 다음 ExtendsContentIntoTitleBar 속성을 true로 설정하고 SetTitleBar 를 호출하여 customTitleBarPanelStackPanel 을 사용자 지정 제목 표시줄로 표시합니다.
private void customButton_Click(object sender, RoutedEventArgs e)
{
    customTitleBarPanel.Visibility = Visibility.Visible;

    // Enable custom title bar content.
    ExtendsContentIntoTitleBar = true;
    // Set the content of the custom title bar.
    SetTitleBar(customTitleBarPanel);
}
// MainWindow.xaml.h
...
void customButton_Click(Windows::Foundation::IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& args);
...

// MainWindow.xaml.cpp
void MainWindow::customButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    customTitleBarPanel().Visibility(Visibility::Visible);

    // Enable custom title bar content.
    ExtendsContentIntoTitleBar(true);

    // Set the content of the custom title bar.
    SetTitleBar(customTitleBarPanel());
}

App.xaml

  1. 파일에서 App.xaml 주석 바로 <!-- Other app resources here --> 다음에 아래와 같이 제목 표시줄에 대한 사용자 지정 색 브러시를 추가했습니다.
<Application
    x:Class="window_titlebar.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:window_titlebar">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
                <!-- Other merged dictionaries here -->
            </ResourceDictionary.MergedDictionaries>
            <!-- Other app resources here -->
            <SolidColorBrush x:Key="WindowCaptionBackground">Green</SolidColorBrush>
            <SolidColorBrush x:Key="WindowCaptionBackgroundDisabled">LightGreen</SolidColorBrush>
            <SolidColorBrush x:Key="WindowCaptionForeground">Red</SolidColorBrush>
            <SolidColorBrush x:Key="WindowCaptionForegroundDisabled">Pink</SolidColorBrush>
        </ResourceDictionary>
    </Application.Resources>
</Application>
  1. 사용자 고유의 앱에서 이러한 단계를 수행한 경우 지금 프로젝트를 빌드하고 앱을 실행할 수 있습니다. 다음과 유사한 애플리케이션 창이 표시됩니다(사용자 지정 앱 아이콘 사용).

    사용자 지정이 없는 템플릿 앱.
    템플릿 앱.

  • 기본 사용자 지정 제목 표시줄은 다음과 같습니다.

    사용자 지정 애플리케이션 아이콘을 사용하는 템플릿 앱
    사용자 지정 애플리케이션 아이콘을 사용하는 템플릿 앱

  • 전체 사용자 지정 제목 표시줄은 다음과 같습니다.

    사용자 지정 제목 표시줄이 있는 템플릿 앱.
    사용자 지정 제목 표시줄이 있는 템플릿 앱.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1809(Windows 앱 SDK 0.5 이상 포함)
머리글 microsoft.ui.xaml.window.h

추가 정보