Beispiel #1
0
        private void fvmw_ViewModeChanged(object sender, EventArgs e)
        {
            IShellView shellView = null;

            try {
                if (0 == shellBrowser.QueryActiveShellView(out shellView))
                {
                    IFolderView folderView = shellView as IFolderView;

                    if (folderView != null)
                    {
                        FVM currentMode = 0;
                        folderView.GetCurrentViewMode(ref currentMode);

                        FVM mode = fvmw.ViewMode;

                        if (currentMode != mode)
                        {
                            folderView.SetCurrentViewMode(mode);
                            UpdateButtonImage(mode);
                        }
                    }
                }
            }
            catch {
            }
            finally {
                if (shellView != null)
                {
                    Marshal.ReleaseComObject(shellView);
                }
            }
        }
Beispiel #2
0
        private FVM GetCurrentViewMode()
        {
            IShellView shellView = null;

            try {
                if (0 == shellBrowser.QueryActiveShellView(out shellView))
                {
                    IFolderView folderView = shellView as IFolderView;

                    if (folderView != null)
                    {
                        FVM currentMode = 0;
                        folderView.GetCurrentViewMode(ref currentMode);

                        return(currentMode);
                    }
                }
            }
            catch {
            }
            finally {
                if (shellView != null)
                {
                    Marshal.ReleaseComObject(shellView);
                }
            }

            return(FVM.ICON);
        }
Beispiel #3
0
        /// <summary>
        /// ¸üа´Å¥Í¼Æ¬
        /// ÐÞ¸´Æ¤·ôÅäÖÿÕͼƬ±¨´í
        /// </summary>
        /// <param name="mode"></param>
        private void UpdateButtonImage(FVM mode)
        {
            switch (mode)
            {
            case FVM.THUMBSTRIP:
                if (null != Resource.imgFilm)
                {
                    button.Image = Resource.imgFilm;
                }
                break;

            case FVM.THUMBNAIL:
                if (null != Resource.imgThumb)
                {
                    button.Image = Resource.imgThumb;
                }
                break;

            case FVM.TILE:
                if (null != Resource.imgTiles)
                {
                    button.Image = Resource.imgTiles;
                }
                break;

            case FVM.ICON:
                if (null != Resource.imgIcon)
                {
                    button.Image = Resource.imgIcon;
                }
                break;

            case FVM.LIST:
                if (null != Resource.imgList)
                {
                    button.Image = Resource.imgList;
                }
                break;

            case FVM.DETAILS:
                if (null != Resource.imgDetails)
                {
                    button.Image = Resource.imgDetails;
                }
                break;
            }
        }
Beispiel #4
0
        public void ShowWindow(Point pnt, FVM fvmCurrentMode)
        {
            const uint SWP_NOACTIVATE    = 0x0010;
            const int  SW_SHOWNOACTIVATE = 4;

            trackBar1.Value = ModeToInt(fvmCurrentMode);

            // set the slider of trackbar under mouse position
            RECT      rct       = GetThumbRect();
            Point     pntCenter = new Point(rct.left + rct.Width / 2, rct.top + rct.Height / 2);
            Rectangle rctScreen = Screen.FromPoint(pnt).Bounds;

            pnt.X = pnt.X - pntCenter.X;
            pnt.Y = pnt.Y - pntCenter.Y;

            // ensure visible in the screen
            if (pnt.X < rctScreen.Left)
            {
                pnt.X = rctScreen.Left;
            }
            else if (pnt.X + Width > rctScreen.Right)
            {
                pnt.X = rctScreen.Right - Width;
            }

            if (pnt.Y < rctScreen.Top)
            {
                pnt.Y = rctScreen.Top;
            }
            else if (pnt.Y + Height > rctScreen.Bottom)
            {
                pnt.Y = rctScreen.Bottom - Height;
            }

            PInvoke.SetWindowPos(Handle, (IntPtr)(-1), pnt.X, pnt.Y, Width, Height, SWP_NOACTIVATE);
            PInvoke.ShowWindow(Handle, SW_SHOWNOACTIVATE);

            trackBar1.Focus();
        }
Beispiel #5
0
        private static int ModeToInt(FVM fvm)
        {
            switch (fvm)
            {
            case FVM.THUMBSTRIP:
                return(5);

            case FVM.THUMBNAIL:
                return(4);

            case FVM.TILE:
                return(3);

            case FVM.LIST:
                return(1);

            case FVM.DETAILS:
                return(0);

            default:
                return(2);
            }
        }
Beispiel #6
0
        // 使用箭头键时候环绕选择文件夹
        protected override bool HandleCursorLoop(Keys key)
        {
            int focusedIdx = ShellBrowser.GetFocusedIndex();
            int itemCount  = ShellBrowser.GetItemCount();
            int selectMe   = -1;
            FVM viewMode   = ShellBrowser.ViewMode;

            switch (viewMode)
            {
            case FVM.CONTENT:
            case FVM.DETAILS:
                if (key == Keys.Up && focusedIdx == 0)
                {
                    selectMe = itemCount - 1;
                }
                else if (key == Keys.Down && focusedIdx == itemCount - 1)
                {
                    selectMe = 0;
                }
                break;

            case FVM.ICON:
            case FVM.SMALLICON:
            case FVM.THUMBNAIL:
            case FVM.TILE:
            case FVM.LIST:
                Keys KeyNextItem, KeyPrevItem, KeyNextPage, KeyPrevPage;
                if (viewMode == FVM.LIST)
                {
                    KeyNextItem = Keys.Down;
                    KeyPrevItem = Keys.Up;
                    KeyNextPage = Keys.Right;
                    KeyPrevPage = Keys.Left;
                }
                else
                {
                    KeyNextItem = Keys.Right;
                    KeyPrevItem = Keys.Left;
                    KeyNextPage = Keys.Down;
                    KeyPrevPage = Keys.Up;
                }
                int pageCount = AutomationManager.DoQuery(factory => {
                    AutomationElement elem = factory.FromHandle(Handle);
                    if (elem == null)
                    {
                        return(-1);
                    }
                    return(viewMode == FVM.LIST ? elem.GetRowCount() : elem.GetColumnCount());
                });
                if (pageCount == -1)
                {
                    return(false);
                }
                int page = focusedIdx % pageCount;
                if (key == KeyNextItem && (page == pageCount - 1 || focusedIdx == itemCount - 1))
                {
                    selectMe = focusedIdx - page;
                }
                else if (key == KeyPrevItem && page == 0)
                {
                    selectMe = Math.Min(focusedIdx + pageCount - 1, itemCount - 1);
                }
                else if (key == KeyNextPage && focusedIdx + pageCount >= itemCount)
                {
                    selectMe = page;
                }
                else if (key == KeyPrevPage && focusedIdx < pageCount)
                {
                    int x = itemCount - focusedIdx - 1;
                    selectMe = x - x % pageCount + focusedIdx;
                }
                break;
            }
            if (selectMe >= 0)
            {
                ShellBrowser.SelectItem(selectMe);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #7
0
        // 使用箭头键时候环绕选择文件夹
        protected override bool HandleCursorLoop(Keys key)
        {
            int focusedIdx = ShellBrowser.GetFocusedIndex();
            int itemCount  = ShellBrowser.GetItemCount();
            int selectMe   = -1;
            FVM viewMode   = ShellBrowser.ViewMode;

            if (viewMode == FVM.TILE && QTUtility.IsXP)
            {
                viewMode = FVM.ICON;
            }
            switch (viewMode)
            {
            case FVM.CONTENT:
            case FVM.DETAILS:
            case FVM.TILE:
                if (key == Keys.Up && focusedIdx == 0)
                {
                    selectMe = itemCount - 1;
                }
                else if (key == Keys.Down && focusedIdx == itemCount - 1)
                {
                    selectMe = 0;
                }
                break;

            case FVM.ICON:
            case FVM.SMALLICON:
            case FVM.THUMBNAIL:
            case FVM.LIST:
                Keys   KeyNextItem, KeyPrevItem, KeyNextPage, KeyPrevPage;
                IntPtr MsgNextPage, MsgPrevPage;
                if (viewMode == FVM.LIST)
                {
                    KeyNextItem = Keys.Down;
                    KeyPrevItem = Keys.Up;
                    KeyNextPage = Keys.Right;
                    KeyPrevPage = Keys.Left;
                    MsgNextPage = (IntPtr)LVNI.TORIGHT;
                    MsgPrevPage = (IntPtr)LVNI.TOLEFT;
                }
                else
                {
                    KeyNextItem = Keys.Right;
                    KeyPrevItem = Keys.Left;
                    KeyNextPage = Keys.Down;
                    KeyPrevPage = Keys.Up;
                    MsgNextPage = (IntPtr)LVNI.BELOW;
                    MsgPrevPage = (IntPtr)LVNI.ABOVE;
                }

                int nextPageIdx = (int)PInvoke.SendMessage(Handle, LVM.GETNEXTITEM, (IntPtr)focusedIdx, MsgNextPage);
                if (nextPageIdx == -1 || nextPageIdx == focusedIdx)
                {
                    nextPageIdx = (int)PInvoke.SendMessage(Handle, LVM.GETNEXTITEM, (IntPtr)focusedIdx, MsgPrevPage);
                }
                else if (QTUtility.IsXP)
                {
                    int testIdx = (int)PInvoke.SendMessage(Handle, LVM.GETNEXTITEM, (IntPtr)nextPageIdx, MsgPrevPage);
                    if (testIdx != focusedIdx)
                    {
                        nextPageIdx = (int)PInvoke.SendMessage(Handle, LVM.GETNEXTITEM, (IntPtr)focusedIdx, MsgPrevPage);
                    }
                }
                if (nextPageIdx == -1 || nextPageIdx == focusedIdx)
                {
                    if (key == KeyNextItem)
                    {
                        if (focusedIdx == itemCount - 1)
                        {
                            selectMe = 0;
                        }
                        else
                        {
                            RECT thisRect = GetItemRect(focusedIdx);
                            RECT nextRect = GetItemRect(focusedIdx + 1);
                            if (viewMode == FVM.LIST)
                            {
                                if (nextRect.top < thisRect.top)
                                {
                                    selectMe = 0;
                                }
                            }
                            else if (nextRect.left < thisRect.left)
                            {
                                selectMe = 0;
                            }
                        }
                    }
                    else if (key == KeyPrevItem && focusedIdx == 0)
                    {
                        selectMe = itemCount - 1;
                    }
                    else if (key == KeyNextPage || key == KeyPrevPage)
                    {
                        if (QTUtility.IsXP)
                        {
                            return(true);
                        }
                    }
                }
                else
                {
                    int pageCount = Math.Abs(focusedIdx - nextPageIdx);
                    int page      = focusedIdx % pageCount;
                    if (key == KeyNextItem && (page == pageCount - 1 || focusedIdx == itemCount - 1))
                    {
                        selectMe = focusedIdx - page;
                    }
                    else if (key == KeyPrevItem && page == 0)
                    {
                        selectMe = Math.Min(focusedIdx + pageCount - 1, itemCount - 1);
                    }
                    else if (key == KeyNextPage && focusedIdx + pageCount >= itemCount)
                    {
                        selectMe = page;
                    }
                    else if (key == KeyPrevPage && focusedIdx < pageCount)
                    {
                        int x = itemCount - focusedIdx - 1;
                        selectMe = x - x % pageCount + focusedIdx;
                    }
                }
                break;
            }

            if (selectMe >= 0)
            {
                SetRedraw(false);
                ShellBrowser.SelectItem(selectMe);
                PInvoke.SendMessage(Handle, LVM.REDRAWITEMS, (IntPtr)focusedIdx, (IntPtr)focusedIdx);
                SetRedraw(true);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #8
0
        private void labelButtons_Click(object sender, EventArgs e)
        {
            FVM mode = (FVM)((LabelEx)sender).Tag;

            trackBar1.Value = ModeToInt(mode);
        }