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)); }