FrmSlideChart.cs 5.04 KB
using GeneralLib;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace SunVoteARSPPT
{
    public partial class FrmSlideChart : Form
    {
        public FrmSlideChart()
        {
            InitializeComponent();

            this.FormClosed += FrmSlideChart_FormClosed;
        }

        private void FrmSlideChart_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.SlideShowWindow != null)
            {
                RECT r = new RECT();
                if (GetWindowRect((IntPtr)Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.SlideShowWindow.HWND, ref r))
                {
                    int x = r.Left;
                    int y = r.Top;
                    int w = r.Right - r.Left;
                    int h = r.Bottom - r.Top;

                    string pos = (this.Left - x) + "," + (this.Top - y) + "," + this.Width + "," + this.Height;
                    GlobalInfo.sysConfig.WriteSysConfig("System", "SlideChartPos", pos);
                }
            }
        }

        private void FrmSlideChart_Load(object sender, EventArgs e)
        {
            this.TopMost = true;//杨斌 2016-10-19
        }

        public void ShowCenter()
        {
            this.Show();

            if (Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.SlideShowWindow != null)
            {
                RECT r = new RECT();
                if (GetWindowRect((IntPtr)Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.SlideShowWindow.HWND, ref r))
                {
                    int x = r.Left;
                    int y = r.Top;
                    int w = r.Right - r.Left;
                    int h = r.Bottom - r.Top;
                    int xm = w - 30;
                    int ym = h - 30;

                    try
                    {
                        var iniSet = INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH);
                        string pos = iniSet.ReadString("System", "SlideChartPos", "");
                        var ary = pos.Split(',');
                        if ((ary != null) && (ary.Length >= 4))
                        {
                            int xx = ConvertOper.Convert(ary[0]).ToInt;
                            int yy = ConvertOper.Convert(ary[1]).ToInt;
                            int ww = ConvertOper.Convert(ary[2]).ToInt;
                            int hh = ConvertOper.Convert(ary[3]).ToInt;
                            if (xx < 0) xx = 0;
                            if (yy < 0) yy = 0;
                            if (xx > xm) xx = xm;
                            if (yy > ym) yy = ym;
                            if (ww < 30) ww = 30;
                            if (hh < 30) hh = 30;
                            this.Location = new Point(x + xx, y + yy);
                            this.Size = new Size(ww, hh);
                        }
                        else
                        {
                            //默认右下角。杨斌 2019-06-27
                            this.Location = new Point(x + (w - this.Width), y + (h - this.Height));
                            //this.Location = new Point(x + (w - this.Width) / 2, y + (h - this.Height) / 2);//居中
                        }
                    }
                    catch
                    {
                        //默认右下角。杨斌 2019-06-27
                        this.Location = new Point(x + (w - this.Width), y + (h - this.Height));
                        //this.Location = new Point(x + (w - this.Width) / 2, y + (h - this.Height) / 2);//居中
                    }
                }
            }
        }

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int Left; //最左坐标
            public int Top; //最上坐标
            public int Right; //最右坐标
            public int Bottom; //最下坐标
        }

        [DllImport("user32")]
        private static extern bool ReleaseCapture();
        [DllImport("user32")]
        private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
        /// <summary>
        /// 通过点住控件移动窗体
        /// </summary>
        /// <param name="ctl"></param>
        private void MoveForm(Control ctl)
        {
            const int WM_NCLBUTTONDOWN = 0xA1;
            const int HTCAPTION = 0x2;
            //const int WM_SYSCOMMAND = 0x112;
            //const int SC_MOVE = 0xF010;
            ReleaseCapture();
            SendMessage(ctl.Handle.ToInt32(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
        }

        private void Chart_MouseDown(object sender, MouseEventArgs e)
        {
            MoveForm(this);
        }
    }
}