D23_01_Window类 RegistryKey Rect

<Window x:Class="demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Margin="5">
        <Button Margin="2" Click="showWindow">Show Window</Button>
        <Button Margin="2" Click="Button_Click">Close Me</Button>
        <Button Margin="2" Click="Button_Click_1">Center Me</Button>
        <Button Margin="2" Click="Button_Click_2">Save Position and Size(配置文件方式)</Button>
        <Button Margin="2" Click="Button_Click_3">Restore Position and Size(注册表方式)</Button>
    </StackPanel>
</Window>

MainWindow(窗体类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace demo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void showWindow(object sender, RoutedEventArgs e)
        {
            TaskWindow winTask = new TaskWindow();
            //ShowDialog()表示以模态方式打开,必须关闭此窗口后才能操作其他窗口
            winTask.ShowDialog();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        //设置窗口位置为工作区的中央
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            double screenHeight = SystemParameters.WorkArea.Height;
            double screenWidth = SystemParameters.WorkArea.Width;
            this.Top = (screenHeight - this.Height) / 2;
            this.Left = (screenWidth - this.Width) / 2;
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            //WindowPositionHelper(注册表的方式保存窗体的位置和大小)
            //WindowPositionHelperConfig(配置文件的方式保存窗体的位置和大小)
            WindowPositionHelper.SaveSize(this);
        }

        private void Button_Click_3(object sender, RoutedEventArgs e)

        {
            //WindowPositionHelper(注册表的方式保存窗体的位置和大小)
            //WindowPositionHelperConfig(配置文件的方式保存窗体的位置和大小)
            WindowPositionHelper.SetSize(this);
        }
    }
}

WindowPositionHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using Microsoft.Win32;

namespace demo
{
    //WindowPositionHelper(注册表的方式保存窗体的位置和大小)
    public  class WindowPositionHelper
    {
        public static string RegPath = @"Software\MyApp";

        public static void SaveSize(Window win)
        {
            RegistryKey key;
            key = Registry.CurrentUser.CreateSubKey(RegPath + win.Name);
            key.SetValue("Bounds", win.RestoreBounds.ToString(System.Globalization.CultureInfo.InvariantCulture));
        }

        public static void SetSize(Window win)
        {
            RegistryKey key;
            key = Registry.CurrentUser.OpenSubKey(RegPath + win.Name);

            if (key != null)
            {
                Rect rect = Rect.Parse(key.GetValue("Bounds").ToString());
                win.Top = rect.Top;
                win.Left = rect.Left;

                if (win.SizeToContent == SizeToContent.Manual)
                {
                    win.Width = rect.Width;
                    win.Height = rect.Height;
                }
            }
        }
    }
    //WindowPositionHelperConfig(配置文件的方式保存窗体的位置和大小)
    public class WindowPositionHelperConfig
    {
        public static void SaveSize(Window win)
        {
            Properties.Settings.Default.WindowPosition = win.RestoreBounds;
            Properties.Settings.Default.Save();
        }

        public static void SetSize(Window win)
        {
            Rect rect = Properties.Settings.Default.WindowPosition;
            win.Top = rect.Top;
            win.Left = rect.Left;

            if (win.SizeToContent == SizeToContent.Manual)
            {
                win.Width = rect.Width;
                win.Height = rect.Height;
            }
        }
    }
}
时间: 2024-10-14 17:26:55

D23_01_Window类 RegistryKey Rect的相关文章

Android中的Rect类——奇葩的思维

Rect类主要用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作.这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom),你也可以获取一个Rect实例的Width和Height.就在这里,奇葩的事情来了,作为一个有一点经验的做图像或者矩阵运算或者编程的程序员来说,大家的共识是,如果一个矩阵是MxN的,也就是M行N列,那么行号是[0,M-1],列号是[0,N-1].可是奇葩的Rect类并不是这样的!如果你这么声明一个Rect类: Rect rect=new

(转)谈谈Android中的Rect类——奇葩的思维

最近在工作中遇到了一些问题,总结下来就是Android中Rect这个类造成的.不得不说,不知道Android SDK的开发人员是怎么想的, 这个类设计的太奇葩了.首先介绍一下Rect类:Rect类主要用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作.这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom),你也可以获取一个Rect实例的Width和Height.就在这里,奇葩的事情来了,作为一个有一点经验的做图像或者矩阵运算或者编程的程序员来说,大家的共识

MFC的窗口分割的设计与实现以及CSplitterWnd 类分析

1 引言 在Microsoft VC++ 6.0 中,基于MFC 的应用程序一般分为以下几种:多文档界面(MDI). 单文档界面(SDI)以及基于对话框的应用程序.其中单文档又可分为单视图的和多视图的, 一般情况下,单文档仅需要单视图就够了,如Windows 自带的记事本.画图程序等等,但 在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度 观察同一文档等. 在MFC 的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了 增加视图(AddVi

PDF数据提取------2.相关类介绍

1.简介 构造数据类型PdfString封装Rect类,PdfAnalyzer类中定义一些PDF解析方法. 2.PdfString类与Rect类 public class PdfString : IComparable<PdfString> { public string Words { get; set; } public Rect Position { get; set; } public int PageNumber { get; set; } public PdfString(stri

C++基础实例-类(6)

栈与基础类 #if 0 #include<iostream> using namespace std; const int MAX=5; //假定栈中最多保存5个数据 //定义名为stack的类,其具有栈功能 class stack { //数据成员 float num[MAX]; //存放栈数据的数组 int top; //指示栈顶位置的变量 public: //成员函数 void init(void) { top=0; } //初始化函数 void push(float x) //入栈函数

你好,C++(32) 类是对现实世界的抽象和描述 6.2.1 类的声明和定义

6.2  类:当C++爱上面向对象 类这个概念是面向对象思想在C++中的具体体现:它既是封装的结果,同时也是继承和多态的载体.因此,要想学习C++中的面向对象程序设计,也就必须从“类”开始. 6.2.1  类的声明和定义 面向对象思想把现实世界中的所有事物都看成是对象,而类是对所有相同类型对象的抽象,是对它们总体的一个描述.比如,学校有很多老师,张老师.李老师.王老师,虽然每个老师各不相同,是不同的对象个体.但他们都是老师这一类型的对象,有着共同的属性(都有姓名.职务)和相同的行为(都能上课.批

HTML5小游戏——看你有多色

使用了封装了canvas的create.js库来实现的. 最终效果: 工程: Rect.js /* * 方块类 */ function Rect(n,color,specialColor){ createjs.Shape.call(this); /** * 设置方块的类型 */ this.setRectType=function(type){ this._RectType=type; switch(type){ case 1: this.setColor(color); break; case

Qt之美(一):d指针/p指针详解(二进制兼容,不能改变它们的对象布局)

Translated  by  mznewfacer   2011.11.16 首先,看了Xizhi Zhu 的这篇Qt之美(一):D指针/私有实现,对于很多批评不美的同路人,暂且不去评论,只是想支持一下Xizhi Zhu,在引用一下Jerry Sun的话,“C++需要宏定义就像需要设计模式一样.也许你不知道,宏是图灵完全(turing complete)的,至少LISP下是这样,C/C++需要宏,几乎所有重要的C/C++库都需要和依赖宏.这些都超过咱们的想象,宏能带给我们所谓语法糖(Synta

目标跟踪--CamShift

转载请注明出处! !! http://blog.csdn.net/zhonghuan1992 目标跟踪--CamShift CamShift全称是ContinuouslyAdaptive Mean Shift,即连续自适应的MeanShift算法.而MeanShift算法,首先得对MeanShift算法有个初步的了解,可以參考这里.而CamShift是在MeanShift的基础上,依据上一帧的结果.来调整下一帧的中心位置和窗体大小,所以.当跟踪的目标在视频中发生变化时,可以对这个变化有一定的调整