<?xml version="1.0"?>
<doc>
    <assembly>
        <name>YourPhone.AppProxyConnection</name>
    </assembly>
    <members>
        <member name="T:YourPhone.AppProxyConnection.Audio.AudioStartOnRemotingService">
            <summary>
            Trigger audio workflow on remoting workflow start instead of inside Orchestrator since
            remoting workflow is the "main" workflow
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager">
            <summary>
            Manages volume of audio during app remoting Audio Streaming
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.GetVolumeState(System.String)">
            <summary>
            Returns the last saved volume for <paramref name="packageName"/> from the database.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.SetVolumeState(System.String,YourPhoneAppProxy.Core.Audio.VolumeState)">
            <summary>
            Set volume slider and mute status for all windows under <paramref name="packageName"/>,
            send the new volume to the phone, and save <paramref name="volumeState"/> to the database.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.SendInitialVolumeToPhone(System.String)">
            <summary>
            Send the last saved volume in the database for <paramref name="packageName"/>, to the phone
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService">
            <summary>
            ConnectionService owns the fundamental connection setup, initializing workflows, and setting up channels
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.RequestConnectionHandleAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Public facing method that takes in handle requests, does handle management, and requests a connection
            Only one handle for each workflow can be requested at once. N+1 requests will throw InvalidOperationException
            </summary>
            <param name="workflowName">Name of workflow to start</param>
            <param name="token">token</param>
            <returns>handle to connection for the workflow</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.EnsureConnectionAsync(System.Threading.CancellationToken)">
            <summary>
            This method ensures that only one connection attempt occurs at once
            All other invocations will wait for the main connection attempt to succeed (or fail) and will adopt that result as well
            Exception is thrown (and standardized to ConnectionServiceException) if the connection attempt fails or times out
            </summary>
            <param name="token">Token by caller for cancellation (e.g. cancel via Close)</param>
            <returns>Task to wait for a connection attempt to complete</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.AttemptConnectionAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Actual logic to form a connection
            Underyling components throw if the connection attempt fails or times out
            </summary>
            <param name="correlationId">Correlation ID to pass around and to Android</param>
            <param name="token">CancellationToken to cancel the operation</param>
            <returns>Task to wait for a connection attempt to complete</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Connection.ClientAdapter">
             <summary>
             This object adapts the Nano IClient interface to APC's IClientAdapter interface
             This gets a client which is already connected and maintains it.
             It also creates a message channel so communication is possible with the device. The message channel is for the invocation of workflows
            
             The client is the first recipient of any new channels created. It also monitors the connection (instability/close)
             </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connection.ClientAdapter.WaitForOpenAsync(System.Threading.CancellationToken)">
             <summary>
             Waits for the client to finish setting up its internal objects
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into WaitForOpenAsync has been canceled
             </summary>
             <param name="token">Cancellation token</param>
             <returns>Returns when client has finished setting up internal objects</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter">
            <summary>
            This object adapts the Nano IConnect interface to APC's IConnectAdapter interface
            This gets the local handshake request in InitializeAsync and uses the remote handshake response in OpenAsync
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter.InitializeAsync(YourPhone.AppProxyConnection.ConnectionSvc.ConnectionTypes.TransportTypeData,System.String,System.Threading.CancellationToken)">
             <summary>
             Initializes the p2p transport
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into InitializeAsync has been canceled
             - InvalidOperationException - Invalid call sequence
             </summary>
             <returns>Returns connection string to be sent to peer for handshake</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter.OpenAsync(System.Text.Json.Nodes.JsonObject)">
             <summary>
             Using the peer's connection string, attempts to open a connection with the peer
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into InitializeAsync has been canceled
             - InvalidOperationException - Invalid call sequence
             - ConnectionServiceException - DirectConnectionTimedOut, Error, Canceled, Failed (unexpected), RemoteTransportTooOld, RemoteTransportTooNew
             </summary>
             <param name="connectionInfo">Peer's connection string</param>
             <returns>Returns client object with open connection</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel">
            <summary>
            Encapsulates the workflow-level message channel. The lifetime of this object is the lifetime of the workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel.InitializeAndOpenAsync">
            <summary>
            Initializes and opens the workflow message channel
            Throws OperationCanceledException if canceled
            Throws InvalidOperationException if Open is called incorrectly
            </summary>
            <returns>Task completed on Open success</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowStarter">
            <summary>
            Encapsulates logic to start a workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowStarter.StartAsync(System.String,System.Action{YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel},System.Threading.CancellationToken)">
            <summary>
            Starts a workflow asynchronously
            WorkflowException may be fired for unexpected code issues, cancellations, or connection failures
            </summary>
            <param name="workflowName">Name of workflow to start</param>
            <param name="initializeAction">Opportunity to register listeners with the workflow message channel before open</param>
            <param name="cancellationToken">Cancel token to stop the connection while its still starting</param>
            <returns>WorkflowMessageChannel to represent the workflow connection</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.GetLastVolumeLevelForPackageId(System.String)">
            <summary>
            Get last volume level that was saved in the database for <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.SaveLastVolumeLevelForPackageId(System.String,System.Int32)">
            <summary>
            Save <paramref name="volumeLevel"/> in the database as the latest volume level <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.GetLastIsMutedStateForPackageId(System.String)">
            <summary>
            Get last mute state that was saved in the database for <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.SaveLastIsMutedStateForPackageId(System.String,System.Boolean)">
            <summary>
            Save <paramref name="isMuted"/> in the database as the latest mute state <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.GetLastScreenLayout(System.String)">
            <summary>
            Get the last screen layout for the given <paramref name="hostedAppId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.SaveScreenLayout(System.String,YourPhone.Contracts.AppProxyConnection.ScreenLayout)">
            <summary>
            Save the <paramref name="screenLayout"/> for the given <paramref name="hostedAppId"/>
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.DragDrop.AppProxyOutputStream">
            <summary>
            Used as a Stream by APC, on write of bytes we send them to AP where they are written into the actual Stream
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService">
            <summary>
            Remoting session describes the time while the user is remoting into the phone
            This interface represents lifecycle events of the remoting workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStarting(YourPhone.AppProxyConnection.RemotingWorkflow.Services.IStartParameters)">
            <summary>
            Called when the remoting session is starting and objects are initialized for the session
            </summary>
            <param name="startParameters">Contains objects associated with a new start of the session</param>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStarted">
            <summary>
            Called when the remoting session has started
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStopped(YourPhoneAppProxy.Core.Utils.Status.DisconnectionReason)">
            <summary>
            Called when the remoting session has stopped
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Services.IApplicationService">
            <summary>
            Service interface for the lifecycle events of AppProxyConnection
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Services.IApplicationService.OnInitialize">
            <summary>
            Called when the remoting session is starting and objects are initialized for the session
            Must be cautious about blocking calls as this is called during initialization of the module
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.OnDeviceChanged">
            <summary>
            Clear caches on device change
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateQueryAsync``1(System.Threading.Tasks.TaskCompletionSource{``0}@,System.Object)">
            <summary>
            Retrieves the cached value or starts a request to fetch the value.
            When starting a new request, create a new cache
            </summary>
            <param name="tcs">Cache location</param>
            <param name="tcsLock">tcsLock</param>
            <returns>Returns cached result if successful, otherwise TaskCanceledException is thrown</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateRequestAsync``1(System.Threading.Tasks.TaskCompletionSource{``0})">
            <summary>
            Shoulder taps then returns cached result
            Possible exceptions:
            - TaskCanceledException if shouldertap fails
            - TimeoutException if shouldertap times out
            </summary>
            <param name="tcs">Cache</param>
            <returns>Returns cached result if successful, otherwise exception is thrown</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateShoulderTapAsync">
            <summary>
            Shoulder taps for all device state
            Task completes on success otherwise throws
            Possible exceptions:
            - TaskCanceledException if shouldertap fails
            - TimeoutException if shouldertap times out
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.DateTime">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.OutgoingItemInfo">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.CheckPermissionAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to check the permission status
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns PermissionStatus based on current permission status</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.ShowPermissionAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to show permission so user can provide input
            Its possible that the permission does not show on Android because the permission is disabled
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns user input from permission prompt on Android</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.LaunchSettingsAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to launch app settings so user can change the permission value
            Returns when the user changes the value, closes the app settings, the request times out, or a new request has been made
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns user input from permission prompt on Android</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.Permission.CombinedAudioPermissionFlowManager.EnsurePermissionFlowCompleteAsync(YourPhone.AppProxyConnection.Session.MessageChannel.Permission.IAudioPermissionManagerInstance,YourPhone.AppProxyConnection.Session.MessageChannel.Permission.IAudioPermissionManagerInstance,System.String,System.Threading.CancellationToken)">
            <summary>
            Triggers the appropriate audio streaming permission flow based on params provided.
            Set <paramref name="virtualDisplayInstance"/> to null if multiple apps is not supported.
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Session.StateMachine.IStateMachineWatcher`4">
            <summary>
            IStateMachineWatcher listens for state changes and ensures that the target
            state machine does not get stuck in an unexpected state.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.StateMachine.IStateMachineWatcher`4.Initialize(YourPhone.AppProxyConnection.Session.StateMachine.IStateMachine{`0,`1,`2,`3},`2,`3,System.Int32,`0[])">
            <summary>Initialize the watcher with a target state machine.</summary>
            <param name="stateMachine">Target state machine</param>
            <param name="timeoutCommand">Command to be issued if the state machine spends
            longer than the <paramref name="delayInMs"/> in an invalid state.</param>
            <param name="timeoutDetails">Command details to be sent to the state machine if
            the timeout is reached</param>
            <param name="delayInMs">Maximum time without any transition out of an invalid state. Exceeding
            the delay causes the watcher to timeout and issue the <paramref name="timeoutCommand"/></param>
            <param name="invalidStates">List of states which are not valid long running states.
            Exceeding the <paramref name="delayInMs"/> while in one of theses states will cause a timeout</param>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.DragRequestItemMessage">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentParser.TryParseInt(Newtonsoft.Json.Linq.JObject,System.String,System.Int32@)">
            <summary>
            If json[key] is a valid integer, parse the int and set it to value.
            Returns false if json[key] is not a valid int. Otherwise returns true.
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Util.AsyncTransactionStore">
            <summary>
            This helps coordinate the request and response of messages where the request is fire and forget
            and a response comes another way. The relationship between the two messages is a transaction id.
            This helps connect the two together so the caller can expose an async method.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.AsyncTransactionStore.StartTransaction``1(System.Nullable{System.Threading.CancellationToken})">
            <summary>
            This starts a transaction and returns a Task that can be waited on for transaction compmletion.
            </summary>
            <returns>AsyncTransaction that allows the caller to wait and get the transaction id</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.AsyncTransactionStore.CompleteTransaction``1(System.String,``0)">
            <summary>
            This completes the transaction. The task returned when the transaction was started is completed.
            </summary>
            <param name="transactionId">Unique id that links to the start of the transaction</param>
            <param name="result">Value to return in the transaction</param>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.IFeatureUtils.IsAudioSupportedAndEnabledAsync">
            <summary>
            Supported is whether phone supports audio
            Enabled is whether PC has EXP enabled
            </summary>
            <returns>whether audio code can run</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Util.ISingleRun">
             <summary>
             This class is used to ensure that a single method will run just once
             However, it may run again if the method throws or the object is Reset
            
             One example of this class's use if there is a method that creates a connection.
             If there are multiple calls to create that connection from different sources, then only one thread should
             actually create the connection, while the other threads wait for that thread's completion before continuing
            
             This class is thread safe
             </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Util.ISingleRun.CurrentRunTask">
            <summary>
            Returns the current run task so callers can check status without invoking a run
            Returns null if there is no current task
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.ISingleRun.RunAsync">
            <summary>
            Runs the single method if not yet run, or waits for a previous call to complete and returns on completion
            </summary>
            <returns>Returns a task to wait for completion</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.ISingleRun.Reset">
            <summary>
            Resets the object so that runs are canceled and threads are released
            </summary>
        </member>
        <member name="T:Windows.Win32.UI.Shell.APPBARDATA">
            <summary>Contains information about a system appbar message.</summary>
            <remarks>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata">Learn more about this API from docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.cbSize">
            <summary>
            <para>Type: <b>DWORD</b> The size of the structure, in bytes.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.hWnd">
            <summary>
            <para>Type: <b>HWND</b> The handle to the appbar window. Not all messages use this member. See the individual message page to see if you need to provide an <b>hWind</b> value.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.uCallbackMessage">
            <summary>
            <para>Type: <b>UINT</b> An application-defined message identifier. The application uses the specified identifier for notification messages that it sends to the appbar identified by the <b>hWnd</b> member. This member is used when sending the <a href="https://docs.microsoft.com/windows/desktop/shell/abm-new">ABM_NEW</a> message.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.uEdge">
            <summary>
            <para>Type: <b>UINT</b> A value that specifies an edge of the screen. This member is used when sending one of these messages: </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.rc">
            <summary>
            <para>Type: <b><a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a></b> A <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a> structure whose use varies depending on the message:</para>
            <para></para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.UI.Shell.APPBARDATA.lParam">
            <summary>
            <para>Type: <b>LPARAM</b> A message-dependent value. This member is used with these messages: </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="T:Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE">
            <summary>Identifies the dots per inch (dpi) setting for a monitor.</summary>
            <remarks>All of these settings are affected by the <a href="https://docs.microsoft.com/windows/desktop/api/shellscalingapi/ne-shellscalingapi-process_dpi_awareness">PROCESS_DPI_AWARENESS</a> of your application</remarks>
        </member>
        <member name="F:Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI">
            <summary>The effective DPI. This value should be used when determining the correct scale factor for scaling UI elements. This incorporates the scale factor set by the user for this specific display.</summary>
        </member>
        <member name="F:Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE.MDT_ANGULAR_DPI">
            <summary>The angular DPI. This DPI ensures rendering at a compliant angular resolution on the screen. This does not include the scale factor set by the user for this specific display.</summary>
        </member>
        <member name="F:Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE.MDT_RAW_DPI">
            <summary>The raw DPI. This value is the linear DPI of the screen as measured on the screen itself. Use this value when you want to read the pixel density and not the recommended scaling setting. This does not include the scale factor set by the user for this specific display and is not guaranteed to be a supported DPI value.</summary>
        </member>
        <member name="F:Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE.MDT_DEFAULT">
            <summary>The default DPI setting for a monitor is MDT_EFFECTIVE_DPI.</summary>
        </member>
        <member name="T:Windows.Win32.Foundation.HRESULT">
            <remarks>
            <para>The **HRESULT** data type is the same as the [SCODE](scode.md) data type. An **HRESULT** value consists of the following fields: - A 1-bit code indicating severity, where zero represents success and 1 represents failure. - A 4-bit reserved value. - An 11-bit code indicating responsibility for the error or warning, also known as a facility code. - A 16-bit code describing the error or warning. Most MAPI interface methods and functions return **HRESULT** values to provide detailed cause formation. **HRESULT** values are also used widely in OLE interface methods. OLE provides several macros for converting between **HRESULT** values and **SCODE** values, another common data type for error handling. > [!NOTE] > In 64-bit MAPI, **HRESULT** is still a 32-bit value. For information about the OLE use of **HRESULT** values, see the  *OLE Programmer's Reference*. For more information about the use of these values in MAPI, see [Error Handling](error-handling-in-mapi.md) and any of the following interface methods: [IABLogon::GetLastError](iablogon-getlasterror.md) [IMAPISupport::GetLastError](imapisupport-getlasterror.md) [IMAPIControl::GetLastError](imapicontrol-getlasterror.md) [IMAPITable::GetLastError](imapitable-getlasterror.md) [IMAPIProp::GetLastError](imapiprop-getlasterror.md) [IMAPIViewAdviseSink::OnPrint](imapiviewadvisesink-onprint.md)</para>
            <para><see href="https://learn.microsoft.com/office/client-developer/outlook/mapi/hresult#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.Foundation.HRESULT.ThrowOnFailure(System.IntPtr)">
            <inheritdoc cref="M:System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(System.Int32,System.IntPtr)" />
            <param name="errorInfo">
            A pointer to the IErrorInfo interface that provides more information about the
            error. You can specify <see cref="F:System.IntPtr.Zero"/> to use the current IErrorInfo interface, or
            <c>new IntPtr(-1)</c> to ignore the current IErrorInfo interface and construct the exception
            just from the error code.
            </param>
            <returns><see langword="this"/> <see cref="T:Windows.Win32.Foundation.HRESULT"/>, if it does not reflect an error.</returns>
            <seealso cref="M:System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(System.Int32,System.IntPtr)"/>
        </member>
        <member name="T:Windows.Win32.Foundation.RECT">
            <summary>The RECT structure defines a rectangle by the coordinates of its upper-left and lower-right corners.</summary>
            <remarks>The RECT structure is identical to the <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rectl">RECTL</a> structure.</remarks>
        </member>
        <member name="F:Windows.Win32.Foundation.RECT.left">
            <summary>Specifies the <i>x</i>-coordinate of the upper-left corner of the rectangle.</summary>
        </member>
        <member name="F:Windows.Win32.Foundation.RECT.top">
            <summary>Specifies the <i>y</i>-coordinate of the upper-left corner of the rectangle.</summary>
        </member>
        <member name="F:Windows.Win32.Foundation.RECT.right">
            <summary>Specifies the <i>x</i>-coordinate of the lower-right corner of the rectangle.</summary>
        </member>
        <member name="F:Windows.Win32.Foundation.RECT.bottom">
            <summary>Specifies the <i>y</i>-coordinate of the lower-right corner of the rectangle.</summary>
        </member>
        <member name="T:Windows.Win32.Graphics.Gdi.MONITORINFO">
            <summary>The MONITORINFO structure contains information about a display monitor.The GetMonitorInfo function stores information in a MONITORINFO structure or a MONITORINFOEX structure.The MONITORINFO structure is a subset of the MONITORINFOEX structure.</summary>
            <remarks>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/ns-winuser-monitorinfo">Learn more about this API from docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="F:Windows.Win32.Graphics.Gdi.MONITORINFO.cbSize">
            <summary>
            <para>The size of the structure, in bytes. Set this member to <c>sizeof ( MONITORINFO )</c> before calling the <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getmonitorinfoa">GetMonitorInfo</a> function. Doing so lets the function determine the type of structure you are passing to it.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/ns-winuser-monitorinfo#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="F:Windows.Win32.Graphics.Gdi.MONITORINFO.rcMonitor">
            <summary>A <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a> structure that specifies the display monitor rectangle, expressed in virtual-screen coordinates. Note that if the monitor is not the primary display monitor, some of the rectangle's coordinates may be negative values.</summary>
        </member>
        <member name="F:Windows.Win32.Graphics.Gdi.MONITORINFO.rcWork">
            <summary>A <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a> structure that specifies the work area rectangle of the display monitor, expressed in virtual-screen coordinates. Note that if the monitor is not the primary display monitor, some of the rectangle's coordinates may be negative values.</summary>
        </member>
        <member name="F:Windows.Win32.Graphics.Gdi.MONITORINFO.dwFlags">
            <summary>
            <para>A set of flags that represent attributes of the display monitor. The following flag is defined. </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/ns-winuser-monitorinfo#members">Read more on docs.microsoft.com</see>.</para>
            </summary>
        </member>
        <member name="T:Windows.Win32.PInvoke">
            <content>
            Contains extern methods from "api-ms-win-shcore-scaling-l1-1-1.dll".
            </content>
            <content>
            Contains extern methods from "GDI32.dll".
            </content>
            <content>
            Contains extern methods from "KERNEL32.dll".
            </content>
            <content>
            Contains extern methods from "SHELL32.dll".
            </content>
            <content>
            Contains extern methods from "USER32.dll".
            </content>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetDpiForMonitor(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE,System.UInt32@,System.UInt32@)">
            <inheritdoc cref="M:Windows.Win32.PInvoke.GetDpiForMonitor(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE,System.UInt32*,System.UInt32*)"/>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetDpiForMonitor(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.UI.HiDpi.MONITOR_DPI_TYPE,System.UInt32*,System.UInt32*)">
            <summary>Queries the dots per inch (dpi) of a display.</summary>
            <param name="hmonitor">Handle of the monitor being queried.</param>
            <param name="dpiType">The type of DPI being queried. Possible values are from the <a href="https://docs.microsoft.com/windows/desktop/api/shellscalingapi/ne-shellscalingapi-monitor_dpi_type">MONITOR_DPI_TYPE</a> enumeration.</param>
            <param name="dpiX">The value of the DPI along the X axis. This value always refers to the horizontal edge, even when the screen is rotated.</param>
            <param name="dpiY">The value of the DPI along the Y axis. This value always refers to the vertical edge, even when the screen is rotated.</param>
            <returns>
            <para>This function returns one of the following values. </para>
            <para>This doc was truncated.</para>
            </returns>
            <remarks>
            <para>This API is not DPI aware and should not be used if the calling thread is per-monitor DPI aware. For the DPI-aware version of this API, see <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getdpiforwindow">GetDpiForWindow</a>. When you call <b>GetDpiForMonitor</b>, you will receive different DPI values depending on the DPI awareness of the calling application. DPI awareness is an application-level property usually defined in the application manifest. For more information about DPI awareness values, see <a href="https://docs.microsoft.com/windows/desktop/api/shellscalingapi/ne-shellscalingapi-process_dpi_awareness">PROCESS_DPI_AWARENESS</a>. The following table indicates how the results will differ based on the <b>PROCESS_DPI_AWARENESS</b> value of your application. </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="F:Windows.Win32.PInvoke.ABM_GETTASKBARPOS">
            <summary>Retrieves the bounding rectangle of the Windows taskbar.</summary>
            <returns>Returns **TRUE** if successful; otherwise, **FALSE**.</returns>
            <remarks>Note that this applies only to the system taskbar. Other objects, particularly toolbars supplied with third-party software, also can be present. As a result, some of the screen area not covered by the Windows taskbar might not be visible to the user. To retrieve the area of the screen not covered by both the taskbar and other app bars the working area available to your application , use the [**GetMonitorInfo**](/windows/desktop/api/winuser/nf-winuser-getmonitorinfoa) function.</remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetDeviceCaps(Windows.Win32.Graphics.Gdi.HDC,Windows.Win32.Graphics.Gdi.GET_DEVICE_CAPS_INDEX)">
            <summary>The GetDeviceCaps function retrieves device-specific information for the specified device.</summary>
            <param name="hdc">A handle to the DC.</param>
            <param name="index"></param>
            <returns>
            <para>The return value specifies the value of the desired item. When <i>nIndex</i> is BITSPIXEL and the device has 15bpp or 16bpp, the return value is 16.</para>
            </returns>
            <remarks>
            <para>When <i>nIndex</i> is SHADEBLENDCAPS: </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/wingdi/nf-wingdi-getdevicecaps#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.CloseHandle(Windows.Win32.Foundation.HANDLE)">
            <summary>Closes an open object handle.</summary>
            <param name="hObject">A valid handle to an open object.</param>
            <returns>
            <para>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call <a href="https://docs.microsoft.com/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror">GetLastError</a>. If the application is running under a debugger,  the function will throw an exception if it receives either a  handle value that is not valid  or a pseudo-handle value. This can happen if you close a handle twice, or if you  call <b>CloseHandle</b> on a handle returned by the <a href="https://docs.microsoft.com/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea">FindFirstFile</a> function instead of calling the <a href="https://docs.microsoft.com/windows/desktop/api/fileapi/nf-fileapi-findclose">FindClose</a> function.</para>
            </returns>
            <remarks>
            <para>The <b>CloseHandle</b> function closes handles to the following objects: </para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/handleapi/nf-handleapi-closehandle#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.SHAppBarMessage(System.UInt32,Windows.Win32.UI.Shell.APPBARDATA@)">
            <inheritdoc cref="M:Windows.Win32.PInvoke.SHAppBarMessage(System.UInt32,Windows.Win32.UI.Shell.APPBARDATA*)"/>
        </member>
        <member name="M:Windows.Win32.PInvoke.SHAppBarMessage(System.UInt32,Windows.Win32.UI.Shell.APPBARDATA*)">
            <summary>Sends an appbar message to the system.</summary>
            <param name="dwMessage">Type: <b>DWORD</b></param>
            <param name="pData">
            <para>Type: <b>PAPPBARDATA</b> A pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/ns-shellapi-appbardata">APPBARDATA</a> structure. The content of the structure on entry and on exit depends on the value set in the <i>dwMessage</i> parameter. See the individual message pages for specifics.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/nf-shellapi-shappbarmessage#parameters">Read more on docs.microsoft.com</see>.</para>
            </param>
            <returns>
            <para>Type: <b>UINT_PTR</b> This function returns a message-dependent value. For more information, see the Windows SDK documentation for the specific appbar message sent. Links to those documents are given in the See Also section.</para>
            </returns>
            <remarks>
            <para><see href="https://learn.microsoft.com/windows/win32/api/shellapi/nf-shellapi-shappbarmessage">Learn more about this API from docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.AllowSetForegroundWindow(System.UInt32)">
            <summary>Enables the specified process to set the foreground window using the SetForegroundWindow function. The calling process must already be able to set the foreground window. For more information, see Remarks later in this topic.</summary>
            <param name="dwProcessId">
            <para>Type: <b>DWORD</b> The identifier of the process that will be enabled to set the foreground window. If this parameter is <b>ASFW_ANY</b>, all processes will be enabled to set the foreground window.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow#parameters">Read more on docs.microsoft.com</see>.</para>
            </param>
            <returns>
            <para>Type: <b>BOOL</b> If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. The function will fail if the calling process cannot set the foreground window. To get extended error information, call <a href="https://docs.microsoft.com/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror">GetLastError</a>.</para>
            </returns>
            <remarks>
            <para>The system restricts which processes can set the foreground window. Normally, a process can set the foreground window by calling the [**SetForegroundWindow**](nf-winuser-setforegroundwindow.md) function only if: - All of the following conditions are true: - The calling process belongs to a desktop application, not a UWP app or a Windows Store app designed for Windows 8 or 8.1. - The foreground process has not disabled calls to **SetForegroundWindow** by a previous call to the [**LockSetForegroundWindow**](nf-winuser-locksetforegroundwindow.md) function. - The foreground lock time-out has expired (see [**SPI_GETFOREGROUNDLOCKTIMEOUT** in **SystemParametersInfo**](nf-winuser-systemparametersinfoa.md#SPI_GETFOREGROUNDLOCKTIMEOUT)). - No menus are active. - Additionally, at least one of the following conditions is true: - The calling process is the foreground process. - The calling process was started by the foreground process. - There is currently no foreground window, and thus no foreground process. - The calling process received the last input event. - Either the foreground process or the calling process is being debugged. A process that can set the foreground window can enable another process to set the foreground window by calling **AllowSetForegroundWindow**. The process specified by the *dwProcessId* parameter loses the ability to set the foreground window the next time that either the user generates input, unless the input is directed at that process, or the next time a process calls **AllowSetForegroundWindow**, unless the same process is specified as in the previous call to **AllowSetForegroundWindow**.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.MonitorFromPoint(System.Drawing.Point,Windows.Win32.Graphics.Gdi.MONITOR_FROM_FLAGS)">
            <summary>The MonitorFromPoint function retrieves a handle to the display monitor that contains a specified point.</summary>
            <param name="pt">A <a href="https://docs.microsoft.com/windows/win32/api/windef/ns-windef-point">POINT</a> structure that specifies the point of interest in virtual-screen coordinates.</param>
            <param name="dwFlags">Determines the function's return value if the point is not contained within any display monitor.</param>
            <returns>
            <para>If the point is contained by a display monitor, the return value is an <b>HMONITOR</b> handle to that display monitor. If the point is not contained by a display monitor, the return value depends on the value of <i>dwFlags</i>.</para>
            </returns>
            <remarks>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-monitorfrompoint">Learn more about this API from docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetMonitorInfo(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.Graphics.Gdi.MONITORINFO@)">
            <inheritdoc cref="M:Windows.Win32.PInvoke.GetMonitorInfo(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.Graphics.Gdi.MONITORINFO*)"/>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetMonitorInfo(Windows.Win32.Graphics.Gdi.HMONITOR,Windows.Win32.Graphics.Gdi.MONITORINFO*)">
            <summary>The GetMonitorInfo function retrieves information about a display monitor. (Unicode)</summary>
            <param name="hMonitor">A handle to the display monitor of interest.</param>
            <param name="lpmi">
            <para>A pointer to a <a href="https://docs.microsoft.com/windows/desktop/api/winuser/ns-winuser-monitorinfo">MONITORINFO</a> or <a href="https://docs.microsoft.com/windows/desktop/api/winuser/ns-winuser-monitorinfoexa">MONITORINFOEX</a> structure that receives information about the specified display monitor. You must set the <b>cbSize</b> member of the structure to sizeof(MONITORINFO) or sizeof(MONITORINFOEX) before calling the <b>GetMonitorInfo</b> function. Doing so lets the function determine the type of structure you are passing to it. The <a href="https://docs.microsoft.com/windows/desktop/api/winuser/ns-winuser-monitorinfoexa">MONITORINFOEX</a> structure is a superset of the <a href="https://docs.microsoft.com/windows/desktop/api/winuser/ns-winuser-monitorinfo">MONITORINFO</a> structure. It has one additional member: a string that contains a name for the display monitor. Most applications have no use for a display monitor name, and so can save some bytes by using a <b>MONITORINFO</b> structure.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-getmonitorinfow#parameters">Read more on docs.microsoft.com</see>.</para>
            </param>
            <returns>
            <para>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.</para>
            </returns>
            <remarks>
            <para>> [!NOTE] > The winuser.h header defines GetMonitorInfo as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see [Conventions for Function Prototypes](/windows/win32/intl/conventions-for-function-prototypes).</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-getmonitorinfow#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetSystemMetrics(Windows.Win32.UI.WindowsAndMessaging.SYSTEM_METRICS_INDEX)">
            <summary>Retrieves the specified system metric or system configuration setting.</summary>
            <param name="nIndex">Type: <b>int</b></param>
            <returns>
            <para>Type: <b>int</b> If the function succeeds, the return value is the requested system metric or configuration setting. If the function fails, the return value is 0. <a href="https://docs.microsoft.com/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror">GetLastError</a> does not provide extended error information.</para>
            </returns>
            <remarks>
            <para>System metrics can vary from display to display. <b>GetSystemMetrics</b>(SM_CMONITORS) counts only visible display monitors. This is different from <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-enumdisplaymonitors">EnumDisplayMonitors</a>, which enumerates both visible display monitors and invisible  pseudo-monitors that are associated with mirroring drivers. An invisible pseudo-monitor is associated with a pseudo-device used to mirror application drawing for remoting or other purposes. The SM_ARRANGE setting specifies how the system arranges minimized windows, and consists of a starting position and a direction. The starting position can be one of the following values.</para>
            <para></para>
            <para>This doc was truncated.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-getsystemmetrics#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetSystemMetricsForDpi(Windows.Win32.UI.WindowsAndMessaging.SYSTEM_METRICS_INDEX,System.UInt32)">
            <summary>Retrieves the specified system metric or system configuration setting taking into account a provided DPI.</summary>
            <param name="nIndex">The system metric or configuration setting to be retrieved. See <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getsystemmetrics">GetSystemMetrics</a> for the possible values.</param>
            <param name="dpi">The DPI to use for scaling the metric.</param>
            <returns>
            <para>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call <a href="https://docs.microsoft.com/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror">GetLastError</a>.</para>
            </returns>
            <remarks>This function returns the same result as <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getsystemmetrics">GetSystemMetrics</a> but scales it according to an arbitrary DPI you provide if appropriate.</remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.GetDC(Windows.Win32.Foundation.HWND)">
            <summary>The GetDC function retrieves a handle to a device context (DC) for the client area of a specified window or for the entire screen.</summary>
            <param name="hWnd">A handle to the window whose DC is to be retrieved. If this value is <b>NULL</b>, <b>GetDC</b> retrieves the DC for the entire screen.</param>
            <returns>
            <para>If the function succeeds, the return value is a handle to the DC for the specified window's client area. If the function fails, the return value is <b>NULL</b>.</para>
            </returns>
            <remarks>
            <para>The <b>GetDC</b> function retrieves a common, class, or private DC depending on the class style of the specified window. For class and private DCs, <b>GetDC</b> leaves the previously assigned attributes unchanged. However, for common DCs, <b>GetDC</b> assigns default attributes to the DC each time it is retrieved. For example, the default font is System, which is a bitmap font. Because of this, the handle to a common DC returned by <b>GetDC</b> does not tell you what font, color, or brush was used when the window was drawn. To determine the font, call <a href="https://docs.microsoft.com/windows/desktop/api/wingdi/nf-wingdi-gettextfacea">GetTextFace</a>. Note that the handle to the DC can only be used by a single thread at any one time. After painting with a common DC, the <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-releasedc">ReleaseDC</a> function must be called to release the DC. Class and private DCs do not have to be released. <b>ReleaseDC</b> must be called from the same thread that called <b>GetDC</b>. The number of DCs is limited only by available memory.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-getdc#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
        <member name="M:Windows.Win32.PInvoke.ReleaseDC(Windows.Win32.Foundation.HWND,Windows.Win32.Graphics.Gdi.HDC)">
            <summary>The ReleaseDC function releases a device context (DC), freeing it for use by other applications. The effect of the ReleaseDC function depends on the type of DC. It frees only common and window DCs. It has no effect on class or private DCs.</summary>
            <param name="hWnd">A handle to the window whose DC is to be released.</param>
            <param name="hDC">A handle to the DC to be released.</param>
            <returns>
            <para>The return value indicates whether the DC was released. If the DC was released, the return value is 1. If the DC was not released, the return value is zero.</para>
            </returns>
            <remarks>
            <para>The application must call the <b>ReleaseDC</b> function for each call to the <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getwindowdc">GetWindowDC</a> function and for each call to the <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getdc">GetDC</a> function that retrieves a common DC. An application cannot use the <b>ReleaseDC</b> function to release a DC that was created by calling the <a href="https://docs.microsoft.com/windows/desktop/api/wingdi/nf-wingdi-createdca">CreateDC</a> function; instead, it must use the <a href="https://docs.microsoft.com/windows/desktop/api/wingdi/nf-wingdi-deletedc">DeleteDC</a> function. <b>ReleaseDC</b> must be called from the same thread that called <a href="https://docs.microsoft.com/windows/desktop/api/winuser/nf-winuser-getdc">GetDC</a>.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-releasedc#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
    </members>
</doc>
