コード例 #1
0
ファイル: MainFrame.cs プロジェクト: raytools/R2ObjView
        public void ShowChildAtCursor(Form form)
        {
            Point point = mdiClient.PointToClient(Cursor.Position);

            point.Offset(-8, -8);

            form.StartPosition = FormStartPosition.Manual;
            form.Location      = point;
            ShowChild(form);
        }
コード例 #2
0
ファイル: StickyWindow.cs プロジェクト: dlech/NXTCamView
        private void Resize(Point p)
        {
            if (originalForm.IsMdiChild)
            {
                MdiClient mdiClient = GetMdiClient(originalForm.MdiParent);
                p = mdiClient.PointToClient(originalForm.PointToScreen(p));
            }
            else
            {
                p = originalForm.PointToScreen(p);
            }
            Screen activeScr = Screen.FromPoint(p);

            formRect = originalForm.Bounds;

            int iRight  = formRect.Right;
            int iBottom = formRect.Bottom;

            // no normalize required
            // first strech the window to the new position
            if ((resizeDirection & ResizeDir.Left) == ResizeDir.Left)
            {
                formRect.Width = formRect.X - p.X + formRect.Width;
                formRect.X     = iRight - formRect.Width;
            }
            if ((resizeDirection & ResizeDir.Right) == ResizeDir.Right)
            {
                formRect.Width = p.X - formRect.Left;
            }

            if ((resizeDirection & ResizeDir.Top) == ResizeDir.Top)
            {
                formRect.Height = formRect.Height - p.Y + formRect.Top;
                formRect.Y      = iBottom - formRect.Height;
            }
            if ((resizeDirection & ResizeDir.Bottom) == ResizeDir.Bottom)
            {
                formRect.Height = p.Y - formRect.Top;
            }

            // this is the real new position
            // now, try to snap it to different objects (first to screen)

            // CARE !!! We use "Width" and "Height" as Bottom & Right!! (C++ style)
            //formOffsetRect = new Rectangle ( stickGap + 1, stickGap + 1, 0, 0 );
            formOffsetRect.X      = stickGap + 1;
            formOffsetRect.Y      = stickGap + 1;
            formOffsetRect.Height = 0;
            formOffsetRect.Width  = 0;

            if (stickToScreen && !originalForm.IsMdiChild)
            {
                Resize_Stick(activeScr.WorkingArea, false);
            }

            if (stickToOther)
            {
                // now try to stick to other forms
                foreach (Form sw in GlobalStickyWindows)
                {
                    Rectangle swRect = GetStickyWindowRect(sw);
                    if (swRect != Rectangle.Empty)
                    {
                        Resize_Stick(swRect, true);
                    }
                }
            }

            // Fix (clear) the values that were not updated to stick
            if (formOffsetRect.X == stickGap + 1)
            {
                formOffsetRect.X = 0;
            }
            if (formOffsetRect.Width == stickGap + 1)
            {
                formOffsetRect.Width = 0;
            }
            if (formOffsetRect.Y == stickGap + 1)
            {
                formOffsetRect.Y = 0;
            }
            if (formOffsetRect.Height == stickGap + 1)
            {
                formOffsetRect.Height = 0;
            }

            // compute the new form size
            if ((resizeDirection & ResizeDir.Left) == ResizeDir.Left)
            {   // left resize requires special handling of X & Width acording to MinSize and MinWindowTrackSize
                int iNewWidth = formRect.Width + formOffsetRect.Width + formOffsetRect.X;

                if (originalForm.MaximumSize.Width != 0)
                {
                    iNewWidth = Math.Min(iNewWidth, originalForm.MaximumSize.Width);
                }

                iNewWidth = Math.Min(iNewWidth, SystemInformation.MaxWindowTrackSize.Width);
                iNewWidth = Math.Max(iNewWidth, originalForm.MinimumSize.Width);
                iNewWidth = Math.Max(iNewWidth, SystemInformation.MinWindowTrackSize.Width);

                formRect.X     = iRight - iNewWidth;
                formRect.Width = iNewWidth;
            }
            else
            {   // other resizes
                formRect.Width += formOffsetRect.Width + formOffsetRect.X;
            }

            if ((resizeDirection & ResizeDir.Top) == ResizeDir.Top)
            {
                int iNewHeight = formRect.Height + formOffsetRect.Height + formOffsetRect.Y;

                if (originalForm.MaximumSize.Height != 0)
                {
                    iNewHeight = Math.Min(iNewHeight, originalForm.MaximumSize.Height);
                }

                iNewHeight = Math.Min(iNewHeight, SystemInformation.MaxWindowTrackSize.Height);
                iNewHeight = Math.Max(iNewHeight, originalForm.MinimumSize.Height);
                iNewHeight = Math.Max(iNewHeight, SystemInformation.MinWindowTrackSize.Height);

                formRect.Y      = iBottom - iNewHeight;
                formRect.Height = iNewHeight;
            }
            else
            {   // all other resizing are fine
                formRect.Height += formOffsetRect.Height + formOffsetRect.Y;
            }

            // Done !!
            originalForm.Bounds = formRect;
        }