修改v2rayN创建节点的窗口, 长宽不超过屏幕
需求
解决思路
具体实践
安装 Microsoft Visual Studio
在 Microsoft Store 里有
https://apps.microsoft.com/store/detail/XPDCFJDKLZJLP8
安装组件选 .NET 桌面开发
下载源码
https://github.com/2dust/v2rayN
解压, 进入 v2ray-master 目录, 进入 v2rayN 目录, 打开 .sln 文件.
修改源码
打开 .sln 文件.
找到 AddServerWindow.xaml 文件.
右键菜单, "查看代码".找到在代码中长这个样子的地方. class后面的是和文件名一样的AddServerWindow, 下面还有一个public然后跟着同样的AddServerWindow
添加以下代码
// 设置窗口的尺寸不大于屏幕的尺寸if (this.Width > SystemParameters.WorkArea.Width){this.Width = SystemParameters.WorkArea.Width;}if (this.Height > SystemParameters.WorkArea.Height){this.Height = SystemParameters.WorkArea.Height;}
截图右边那一半是修改前的, 作为对比.
保存, 编译, 开始调试(或执行).
用菜单也可以, 用快捷键也可以, 用快捷按钮也可以.
实际上, 还是没有一下子全部显示啦, 不过窗口的标题栏完整显示了, 而且也出现了上下滚动栏, 可以把窗口下半部分"滚"出来. :)
那么故技重施, 打开这些文件名后面带Window的代码窗口.
然后你会发现, 主窗口没有修改效果.
其实除了这些以外, 还要改一个地方.
找到MainWindow,
右键菜单 - "查看设计器"
完
正确答案放在GitHub上
https://github.com/crazypeace/v2rayN
========
题外话
与GPT(https://t.me/gpt_user)的交流过程
先问了GPT, 得到这样的回答
在代码里找到Window_Loaded函数.
再参照GPT的回答, 改成这样
编译报错
把错误复制, 去问GPT
把代码修改
还是报错, 说没有Forms这个命名空间.
我又换了几种提问方式, 在一次GPT的回答中提到了 Windows Forms 和 WPF
于是, 我再次提问, 得到这样的回答
然后换成这两段代码.
然后跑起来. 会发现窗口显示是这么个样子.
那么问题就在于窗口显示出来的整个过程.
首先是窗口要 初始化, 这时窗口被设置为一个大的形状.
然后是窗口 显示出来, 这时窗口是一个大的形状, 那么为了默认显示在屏幕正中间, 窗口的上下都会各有一部分显示在屏幕之外.
窗口显示在屏幕正中间, 在编程世界中的意思是, 窗口的上下边到屏幕上下边的距离相等, 窗口的左右边到屏幕的左右边的距离相等.
窗口上下边超过了屏幕, 那么负数也是要相等. :)
显示完之后, 再调用Window_Loaded函数. 在这个函数的过程中, 我们修改了窗口的宽度和高度, 但是窗口的 位置 没有改变.
窗口的 位置 没有改变, 在编程世界中的意思是, 窗口的左上角这个顶点的位置没有改变.
所以我们可以看到窗口的下边沿/边框/Border "缩起来"了很多.
解决方案一种就是在设置窗口形状以后, 判断如果左上角在屏幕以外时, 设置左上角的位置到屏幕内.
if (this.Top < 0){this.Top = 0;}
还有一种方案就是把调整窗口的形状提前到窗口初始化过程时. 就像本篇博文最前面讲的那样.
==========
update
到上面为止修改的方案在你自己的一个屏幕的场景下应该没问题, 但是在多个屏幕的情况下, 比如你是笔记本外接了一个大显示器, 会出现问题是:
1. 如果大屏幕是主屏幕, 在小屏幕上面启动程序, 并不能正确设置窗口大小
2. 如果小屏幕是主屏幕, 窗口移动到大屏幕上面后, 拖动窗口不能变得更大, 窗口最大化也不能显示更多内容.
原因是我们设置了窗口的最大尺寸. 需要修改为设置窗口的实际尺寸.
// 设置窗口的尺寸不大于屏幕的尺寸if (this.Width > SystemParameters.WorkArea.Width){this.Width = SystemParameters.WorkArea.Width;}if (this.Height > SystemParameters.WorkArea.Height){this.Height = SystemParameters.WorkArea.Height;}
==========
update
合并入v2rayN, 成为Contributors之一.
人人都可以为开源项目出一份力. 虽然功能简单, 代码量小, 但是你的努力不会被遗忘.
==========
后记
最后谈一下把GPT作为copilot编程的体验.
我觉得GPT吃的东西还不够多, 确实有的时候准确率堪忧. 不过它对于一个面对全新领域的人来说, 可以提供一些此领域内的关键字, 作为入门的踏脚石或者说灵感, 可以再继续问GPT, 或者是去Google, 然后自己进一步消化.
Good job, i got it !
回复删除恭喜你做到了!
删除编程并不是难以企及的. 只要心中有冲动, 大胆动手. 人人都可以玩代码!