Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Mica is een ondoorzichtig materiaal dat het thema en de bureaubladachtergrond van de gebruiker bevat om een zeer gepersonaliseerde uitstraling te creëren. Terwijl de gebruiker het venster over het scherm verplaatst, past het Mica-materiaal zich dynamisch aan om een rijke visualisatie te maken met behulp van de achtergrond onder de toepassing. Daarnaast helpt het materiaal gebruikers zich te concentreren op de huidige taak door terug te vallen op een neutrale kleur wanneer de app inactief is.
In dit artikel wordt beschreven hoe u Mica kunt toepassen als de basislaag van uw Win32-app, waarbij de toepassing en zichtbaarheid in het titelbalkgebied prioriteit krijgen. Voor meer informatie over lagen voor apps met Mica, zie Mica-materiaal.
Vereiste voorwaarden
Als u Mica wilt toepassen op een Win32-app voor Windows 11, moet u de Windows App SDK-gebruiken. U hebt het volgende nodig:
- Installeer de nieuwste Windows App SDK Visual Studio-extensie of Microsoft.WindowsAppSDK NuGet-pakket. Zie Downloads voor de Windows App SDK-.
- Voor niet-verpakte apps verwijst u naar de Windows App SDK, installeert u WinRT en beschikt u over een overeenkomende Windows App Runtime Redistributable (Microsoft.WindowsAppRuntime.Redist) geïnstalleerd. Zie Implementatiehandleiding voor Windows App SDK voor frameworkafhankelijke apps die zijn verpakt met externe locatie of uitgepakte.
Mica gebruiken in Win32-apps
Als u mica in uw app wilt gebruiken, gebruikt u de klasse MicaController. Deze klasse beheert zowel het weergeven van het systeemachtergrondmateriaal als de verwerking van systeembeleid voor het mica-materiaal.
De MicaController reageert standaard op de licht- en donkere thema's van het systeem. Als u dit gedrag wilt overschrijven, kunt u de volgende eigenschappen doorgeven aan de MicaController:
Aanbeveling
De code in deze sectie is afkomstig uit het Windows App SDK Win32 Mica-voorbeeld op GitHub. Zie de GitHub-opslagplaats voor de volledige code. In deze voorbeelden wordt C++/WinRT-gebruikt.
Als u Mica wilt inschakelen, hebt u een verwijzing naar de Windows App SDK, een Compositor-en een DispatcherQueue-nodig.
In dit voorbeeld ziet u hoe u het volgende kunt doen om een uitgepakte app in te stellen:
- Initialiseer WinRT.
- Verwijs naar de WindowsAppSDK vanuit een uitgepakte app.
- Zie voor meer informatie over het gebruik van de Windows App SDK-runtime voor apps die met een externe locatie verpakt zijn of niet verpakt.
- Zie voor voorbeeldcode
WindowsAppSDKBootstrapperContextin Utilities.h.
- Registreer de vensterklasse.
- Maak de Mica-wachtrijcontroller
- Initialiseer een WinRT-compositor.
Vanuit WinMain.cpp
int __stdcall WinMain(_In_ HINSTANCE, _In_opt_ HINSTANCE, _In_ PSTR, _In_ int)
{
// Initialize WinRt Instance
winrt::init_apartment();
// Enable referencing the WindowsAppSDK from an unpackaged app.
Utilities::WindowsAppSDKBootstrapperContext sdkContext;
// Register Window class before making the window.
MicaWindow::RegisterWindowClass();
// Mica requires a compositor, which also requires a dispatcher queue.
auto controller = Utilities::CreateDispatcherQueueControllerForCurrentThread();
auto compositor = winrt::Compositor();
// Create your window...
...
}
Vanuit MicaWindow.cpp
void MicaWindow::RegisterWindowClass()
{
auto instance = winrt::check_pointer(GetModuleHandleW(nullptr));
WNDCLASSEX wcex = { sizeof(wcex) };
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.hInstance = instance;
wcex.hIcon = LoadIconW(instance, IDI_APPLICATION);
wcex.hCursor = LoadCursorW(nullptr, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszClassName = ClassName.c_str();
wcex.hIconSm = LoadIconW(wcex.hInstance, IDI_APPLICATION);
winrt::check_bool(RegisterClassExW(&wcex)); // check if the window class was registered successfully
}
De methode winrt::init_apartment is standaard multithreaded. Als voor uw app één thread is vereist, zoals het WebView2-voorbeeld, kunt u eenvoudig het type instellen.
winrt::init_apartment(winrt::apartment_type::single_threaded);
U kunt nu de functie CreateWindowEx() gebruiken om een venster te maken. Vervolgens moet u een vensterdoel maken en het instellen als de root om op te geven op welke laag Mica moet worden toegepast. Bevestig ten slotte dat Mica wordt ondersteund door het venster en het doel.
Het Win32 Mica-voorbeeld creëert de klassen DesktopWindow- en MicaWindow om dit werk te doen. Deze klassen definiëren: ClassName, windowTitle, m_target, m_micaControlleren m_isMicaSupported.
Vanuit WinMain.cpp
// Mica window is inherited from the MicaWindow class, which is an extension of the DesktopWindow Class.
// Here, we initialize the main window and set the title.
auto window = MicaWindow(compositor, L"Hello, Mica!");
Vanuit MicaWindow.cpp
// Create the main window and enable Mica.
MicaWindow::MicaWindow(const winrt::Compositor& compositor, const std::wstring& windowTitle)
{
auto instance = winrt::check_pointer(GetModuleHandleW(nullptr));
WINRT_ASSERT(!m_window); // check that window is not initialized
WINRT_VERIFY(
// Window Properties
CreateWindowExW(
WS_EX_COMPOSITED,
ClassName.c_str(), // declared in MicaWindow.h and defined above
windowTitle.c_str(),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
800, 600,
nullptr,
nullptr,
instance,
this
));
// Check that the window was created successfully.
WINRT_ASSERT(m_window);
ShowWindow(m_window, SW_SHOWDEFAULT);
UpdateWindow(m_window);
// The Mica controller needs to set a target with a root to recognize the visual base layer.
m_target = CreateWindowTarget(compositor);
// Need to set a root before we can enable Mica.
m_target.Root(compositor.CreateContainerVisual());
m_micaController = winrt::MicaController();
m_isMicaSupported = m_micaController.SetTarget(winrt::Microsoft::UI::WindowId{ reinterpret_cast<uint64_t>(m_window) }, m_target);
}
Mica gebruiken in Win32 WebView2-apps
De basisprincipes van het toepassen van Mica zijn consistent voor de meeste Win32-toepassingen. Het proces voor WebView2 volgt de basisstappen uit de Win32-instructies die eerderwerden weergegeven. In dit geval moet u echter een enkelvoudig proces opgeven van de init_apartment-functie van WinRT.
Aanbeveling
De code in deze sectie is afkomstig uit het Windows App SDK WebView2 Mica-voorbeeld op GitHub. Zie de GitHub-opslagplaats voor de volledige code.
Om aan de slag te gaan, stelt u het vereiste appartement, de controller, compositor, het doel en de hoofdmap in. De WinRT-init_apartment-functie is standaard meerdraads, maar WebView2 is inherent enkeldraads. Als u init_apartment wilt instellen als één thread, geeft u de parameter winrt::apartment_type::single_threaded door. In de Mica WebView2 Samplevereenvoudigen we de syntaxis door een afzonderlijke klasse te maken voor webweergavefuncties, waarnaar wordt verwezen in de volgende code.
Vanuit Main.cpp
int __stdcall WinMain(_In_ HINSTANCE, _In_opt_ HINSTANCE, _In_ PSTR, _In_ int)
{
winrt::init_apartment(winrt::apartment_type::single_threaded);
// Enable referencing the WindowsAppSDK from an unpackaged app.
// Remember to have a matching Microsoft.WindowsAppRuntime.Redist installed.
// https://dotnet.territoriali.olinfo.it/windows/apps/windows-app-sdk/deploy-unpackaged-apps
Utilities::WindowsAppSDKBootstrapperContext sdkContext;
CompositionWindow::RegisterWindowClass();
// A dispatcher queue is required to be able to create a compositor.
auto controller = Utilities::CreateDispatcherQueueControllerForCurrentThread();
auto compositor = winrt::Compositor();
auto window = WebView2Window(compositor, L"Hello, WebView2!");
...
}
Voor een volledige demonstratie van de WebView2Window-klasse en de integratie met Mica, raadpleegt u het Voorbeeld van Windows App SDK WebView2 Mica op GitHub. U ziet hoe de CompositionWindow en WebView2Window-klassen berichten verwerken, de webweergaveomgeving initialiseren en de venstercontroller verwijderen zodra het venster is gesloten.
Verwante artikelen
materialen, laagvorming en verheffing, Mica-voorbeelden van Windows App SDK
Windows developer