Accessing and handling WndProc in USD

Everything in Windows is a window, from buttons to dialogs to everything in between. Same principle still applies to WPF applications such as USD. I recently had a requirement that I needed to release some external resources in USD before the AgentDesktop was destroyed. To do that, all I had to do was to add a hook to a HwndSource and write a pseudo window procedure. The message I was interested in handling was WM_DESTROY (0x0002)

      HwndSrc = PresentationSource.FromVisual(Application.Current.MainWindow) as HwndSource;
      HwndSrc?.AddHook(PseudoWndProc);


        /// <summary>
        /// Pseudoes the WND proc.
        /// </summary>
        /// <param name="hWnd">The h WND.</param>
        /// <param name="msg">The MSG.</param>
        /// <param name="wParam">The w parameter.</param>
        /// <param name="lParam">The l parameter.</param>
        /// <param name="handled">if set to <c>true</c> [handled].</param>
        /// <returns></returns>
        private IntPtr PseudoWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
            var retval = IntPtr.Zero;

            switch (msg) {
                case Win32Helper.WM_DESTROY:
                   // Release external resources here
                  
                    break;
            }

            return retval;
        }

Leave a Reply

Your email address will not be published. Required fields are marked *