美文网首页
三、控制窗口

三、控制窗口

作者: 安静的程序员 | 来源:发表于2020-07-25 04:29 被阅读0次

一、拖动窗口
Windows命名空间中,有一个拖动窗口的方法:DragMove(),鼠标按住标题栏时,调用此方法,即可拖动窗口。
我猜测该方法的工作原理:调用该方法时,会通知系统开始拖动窗口,系统根据鼠标的偏移来移动窗口,松开鼠标时,系统自动关闭拖动模式。

需要注意,调用该方法前,必须确保鼠标左键被按下。判断鼠标左键是否按下,有三种方式:
01.直接判断鼠标左键是否按下
if (Mouse.LeftButton == MouseButtonState.Pressed)
02.在鼠标按下事件中,判断是否为左键触发的事件
if (e.ChangedButton == MouseButton.Left)
03.添加左键按下事件
LeftButtonDown(object sender, MouseButtonEventArgs e)
我使用第三种方式,将判断的工作交给系统。

我们先创建一个方法,用于添加窗口的所有控制事件:

private void AddWindowControlEvent()
{
}

在创建窗口样式时,已经为标题栏确定了名称。这样便可通过GetTemplateChild()方法查找标题栏,从而添加事件:

((TextBlock)GetTemplateChild("TitleBar")).MouseLeftButtonDown += TitleBar_LeftButtonDown;

在事件中,只需添加一行代码:

private void TitleBar_LeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DragMove();
}

接下来,在窗口加载时,添加窗口控制事件。WPF中,所有控件都有一个加载完成事件,我们先在MainWindow.xaml文件中添加事件:



编辑事件:

private void Window_Loaded(object sender, RoutedEven-tArgs e)
{
    AddWindowControlEvent();
}

启动后,在标题栏上按下鼠标左键,便可拖动窗口了。
由于没有禁用窗口的缩放,将窗口拖动至屏幕顶端时,会最大化窗口,任务栏都被挡住了,而且窗口边缘会被屏幕吃掉一部分,至今我都搞不清楚这被吃掉的部分尺寸是如何计算的,所以,最简单粗暴的方法就是:禁用窗口缩放,顺便将窗口启动位置修改为屏幕中心:


二、最小化与关闭窗口

使用同样的方法,为最小化按钮和关闭按钮添加单击事件:

((Button) GetTemplateChild("MinButton")).Click += MinButton_Click;
((Button) GetTemplateChild("CloseButton")).Click += ButtonClose_Click;

事件实现:

// 最小化窗口
private void MinButton_Click(object sender, RoutedEventArgs e)
{
    WindowState = WindowState.Minimized;
}
// 关闭窗口
private void ButtonClose_Click(object sender, RoutedEventArgs e)
{
    Close();
}

再次运行,窗口就可以正常拖动、最小化以及关闭了。
项目链接:https://pan.baidu.com/s/1-NQHm0FmSIpeldaM3OFi6A
提取码:otx6

相关文章

  • 三、控制窗口

    一、拖动窗口Windows命名空间中,有一个拖动窗口的方法:DragMove(),鼠标按住标题栏时,调用此方法,即...

  • TCP的流量控制与拥塞控制机制

    参考:滑动窗口TCP的流量控制和拥塞控制 1 流量控制 利用滑动窗口机制实施流量控制 TCP协议里窗口机制有2种:...

  • iOS —— 程序启动流程和自定义程序窗口

    在上文 iOS —— 视图,视图控制器和窗口 中,我们大概描述视图,视图控制器和窗口这是三个开发中绕不开的东西。 ...

  • selenium中控制浏览器的API

    一、控制浏览器窗口的大小 案例一 二、控制浏览器后退、前进 案例二 三、模拟浏览器刷新 案例三

  • Python 学习笔记 026

    操作系统控制和窗口隐藏等特殊命令 1.控制窗口显示和隐藏 2.控制窗口移动 语音合成 1.输入文本 自动朗读 2....

  • TCP三次握手(转)

    建立连接:理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓...

  • electron学习---BrowserWindow对象

    创建和控制浏览器窗口。 无边框窗口 优雅地显示窗口 父子窗口 模态窗口 模态窗口是禁用父窗口的子窗口,创建模态窗口...

  • 拥塞控制和流量控制

    滑动窗口的解释: 拥塞控制窗口+慢启动+拥塞控制算法=拥塞控制 TCP特性使得每个TCP连接可以得到均等的带宽。在...

  • 通过xib描述控制器的view

    创建窗口 设置窗口的根控制器登录控制器alloc/initWithNibName:bundle:创建xib,用xi...

  • TCP是如何实现可靠传输的

    自动重传请求(ARQ、平均往返时间) 流量控制 (接受窗口rwnd) 拥塞控制(拥塞窗口cwnd) 0、概述: 众...

网友评论

      本文标题:三、控制窗口

      本文链接:https://www.haomeiwen.com/subject/gauulktx.html