我正在使用 C++ 开发 WinUI 3 演示。
我想要一个主窗口处理程序或本机窗口处理程序来打开一个Picker
在一个Page
.
我正在使用的代码块工作正常Window
但它不起作用Page
.
auto windowNative{ this->try_as<::IWindowNative>()};
winrt::check_bool(windowNative);
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
帮我得到MainWindow
处理程序在Page1.xaml.cpp
Only Window https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.window实施IWindowNative https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/win32/microsoft.ui.xaml.window/nn-microsoft-ui-xaml-window-iwindownative,因此您需要传递窗口引用,或者如果您确定进程中只有一个窗口,则可以使用如下代码:
HWND GetProcessFirstWindowHandle(DWORD pid = 0)
{
struct ProcessWindow { DWORD pid; HWND hWnd; } pw = {};
pw.pid = pid ? pid : GetCurrentProcessId();
EnumWindows([](auto hWnd, auto lParam)
{
DWORD pid;
GetWindowThreadProcessId(hWnd, &pid);
if (pid != ((ProcessWindow*)lParam)->pid)
return TRUE;
((ProcessWindow*)lParam)->hWnd = hWnd;
return FALSE;
}, (LPARAM)&pw);
return pw.hWnd;
}
例如,简单地这样称呼它:
void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
auto hwnd = GetProcessFirstWindowHandle();
}
您还可以添加一些对类名的检查,就像这个答案中所做的那样(它是 C#,但代码已经使用互操作来访问本机 Windows API):检索类库 WinUI 3 中的窗口句柄 https://stackoverflow.com/a/74286947/403671
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)