Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a témakör bemutatja, hogyan kérdezheti le az ablak fogópontját egy asztali alkalmazásban. A hatókör a WinUI 3, Windows Presentation Foundation (WPF) és Windows Forms (WinForms) alkalmazások; a kódpéldákat c# és C++/WinRT mutatja be.
A fent felsorolt fejlesztési és felhasználói felületi keretrendszerek (a háttérben) a Win32 API-ra épülnek. A Win32-ben egy ablakobjektumot egy ablakfogópontként ismert érték azonosít. Az ablakfogantyú típusa pedig egy HWND (bár a C#-ban intPtrként is megjelenik). Mindenesetre hallani fogja a HWND kifejezést, amelyet rövidítésként használják az ablakfogantyú helyett.
Számos ok miatt érdemes lekérni a HWND egy ablakból a WinUI, WPF vagy WinForms asztali alkalmazásban. Ilyen például a HWND használata bizonyos Windows Runtime (WinRT) objektumokkal való együttműködésre, amelyek egy CoreWindow függenek a felhasználói felület (UI) megjelenítéséhez. További információ: A CoreWindow-tól függő WinRT felhasználói felületi objektumok megjelenítése.
WinUI és C#
Az alábbi C#-kód bemutatja, hogyan kérhető le egy WinUI-ablakobjektum ablakleírója (HWND). Ez a példa a WinRT.Interop.WindowNative C# interop osztály GetWindowHandle metódusát hívja meg. A C#-interop osztályokkal kapcsolatos további információkért lásd: A .NET alkalmazásközi API-k hívása.
// MainWindow.xaml.cs
private async void myButton_Click(object sender, RoutedEventArgs e)
{
// Retrieve the window handle (HWND) of the current WinUI window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
}
WinUI a C++ használatával
Az alábbi C++/WinRT-kód bemutatja, hogyan kérhető le egy WinUI-ablakobjektum ablakfogópontja (HWND). Ez a példa az IWindowNative::get_WindowHandle metódust hívja meg.
// pch.h
...
#include <microsoft.ui.xaml.window.h>
// MainWindow.xaml.cpp
void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
// Retrieve the window handle (HWND) of the current WinUI window.
auto windowNative{ this->m_inner.as<::IWindowNative>() };
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
}
WPF C# nyelvvel
Az alábbi C#-kód bemutatja, hogyan kérhető le az ablakfogópont (HWND) egy WPF ablakobjektumhoz. Ez a példa a WindowInteropHelper osztályt használja.
// MainWindow.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
var wih = new System.Windows.Interop.WindowInteropHelper(this);
var hWnd = wih.Handle;
}
WinForms with C#
Az alábbi C#-kód bemutatja, hogyan kérhető le egy WinForms-űrlapobjektum ablakfogópontja (HWND). Ez a példa a NativeWindow.Handle tulajdonságot használja.
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
A vizualizációelemeket üzemeltető ablak meghatározása
Egy vizuális elemből hozzáférhet a UIElement.XamlRoot; majd a XamlRoot.ContentIslandEnvironment; végül pedig a ContentIslandEnvironment.AppWindowId tulajdonság a legfelső szintű Win32 HWND azonosítóját tartalmazza.
Kapcsolódó témakörök
Windows developer