private int OpenFileSubClass
        (
            IntPtr hWnd,
            uint uMsg,
            IntPtr wParam,
            IntPtr lParam,
            IntPtr uIdSubclass,
            uint dwRefData
        )
        {
            switch (uMsg)
            {
            case InteropUtil.WM_PARENTNOTIFY:
            {
                unchecked
                {
                    int id = InteropUtil.GetDlgCtrlID(lParam);

                    if (LOW((uint)wParam) == InteropUtil.WM_CREATE &&
                        (id == InteropUtil.ID_FileList || id == 0))
                    {
                        InteropUtil.SetWindowSubclass(lParam, m_defViewSubClassDelegate, 0, 0);
                    }
                }
                break;
            }
            }
            return(InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam));
        }
        private int DefViewSubClass
        (
            IntPtr hWnd,
            uint uMsg,
            IntPtr wParam,
            IntPtr lParam,
            IntPtr uIdSubclass,
            uint dwRefData
        )
        {
            if (uMsg == InteropUtil.WM_NOTIFY)
            {
                var header = (InteropUtil.NMHDR)Marshal.PtrToStructure(lParam, typeof(InteropUtil.NMHDR));
                if (header.code == InteropUtil.LVN_ITEMCHANGED && header.hwndFrom != IntPtr.Zero && header.idFrom == 1)
                {
                    var nmListView =
                        (InteropUtil.NMLISTVIEW)Marshal.PtrToStructure(lParam, typeof(InteropUtil.NMLISTVIEW));
                    bool oldSelected = (nmListView.uOldState & InteropUtil.LVIS_SELECTED) != 0;
                    bool newSelected = (nmListView.uNewState & InteropUtil.LVIS_SELECTED) != 0;
                    if (!oldSelected && newSelected)
                    {
                        if (!m_suppressSelectionChange)
                        {
                            //the item went from not selected to being selected
                            //so we want to look and see if the selected item is a folder, and if so
                            //change the text of the item box to be the item on the folder. But, before we do that
                            //we want to make sure that the box isn't currently focused.
                            IntPtr hParent    = InteropUtil.GetParent(hWnd);
                            IntPtr hFNCombo   = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo);
                            IntPtr hFNEditBox = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameTextBox);
                            IntPtr hFocus     = InteropUtil.GetFocus();

                            if
                            (
                                (hFNCombo == IntPtr.Zero || hFNCombo != hFocus) &&
                                (hFNEditBox == IntPtr.Zero || hFNEditBox != hFocus)
                            )
                            {
                                SetFileNameToSelectedItem(header.hwndFrom, hFNCombo, nmListView.iItem);
                            }
                        }
                        m_suppressSelectionChange = false;
                    }
                }
            }
            return(InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam));
        }