首先,是遇到的问题:

  一天,使用VS2010看新项目代码时候,发现选中某个变量后,其它位置高亮显示的变量颜色太淡,不利于阅读代码,如下图。所以想修改这个颜色。

后来网上找了一遍,可以这样设置:工具——选项——环境——字体和颜色——VA Find Reference——项背景色——自定义。设置后效果图如下图:

然后,我也想通过同样的办法在VS2015里设置 int_my_color 的背景色。于是,折磨来了。


首先,按照VS2010里的办法设置变量的背景色:选项——工具——自定义颜色,发现不能生效。

然后,又尝试修改了多项设置,仍然不行,int_my_color的高亮背景色完全不给反应。

再然后,想到了

  1.这些颜色设置肯定是保存在VS的配置文件里;

  2.颜色肯定有对应的像素值;

于是:

  1.找到了这个目录:C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\vshub\Settings,以及《SharedSettings.xml》,UI里修改颜色设置后,该文件会更新,可以推断出这个文件肯定是我要找的目标。

  2.取到int_my_color背景色像素值(226,230,214),对应值#e2e6d6,14870230。如下图:

 

所以去《SharedSettings.xml》搜索上面的像素值,然而,搜不到。

于是:我怀疑是像素值不对。所以进行测试。


测试过程:

  1、首先要找到一个正确的标识(这里使用注释的背景色),来确定 if (设置的颜色 == 实际取到的颜色)

  第一步:设置注释的背景色为RGB(255,0,0),纯文本背景色为白色RGB(255,255,255)。但是实际测试发现:注释的背景色为RGB(255,51,51),与设置不同

   

这就很奇怪了,为什么设置为RGB(255,0,0),实际得到的却是RGB(255,51,51)呢?

第二步:继续测试:重新设置纯文本背景颜色为黑色RGB(0,0,0),注释的背景色为RGB(255,0,0),但是得到的像素值却是(204,0,0),如下图,也是很奇怪。

于是,通过第一步和第二步的结果,我做了推断1

    VS2015显示的背景色不是由单一设置的颜色来决定的,它可能是两个背景色RGB值的叠加。比如上面的RGB值=纯文本背景RGB + 注释背景RGB。

然后,就是分析,叠加规则是什么呢?

  已有数据:

    a.实际注释背景色RGB(255,51,51) = 纯文本白色RGB(255,255,255)+注释红色RGB(255,0,0)

    b.实际注释背景色RGB(204,0,0) = 纯文本黑色RGB(0,0,0)+注释红色RGB(255,0,0)

    由a,b知道使用白色背景会在后两位加51,使用黑色背景就会变成204。好像看不出什么规律。

此时只能继续猜测 (纯文本背景色,注释的背景色)两者之间的叠加关系。黑色RGB(0,0,0),似乎比白色RGB(255,255,255)要方便,因为初始值为0,可能会不受某些数据干扰。

于是选择黑色叠加注释的背景色,继续做测试:

  1.仍然是纯文本黑色RGB(0,0,0),设置注释的背景色为红色RGB(200,0,0),实际注释背景色RGB(160,0,0)

  2.纯文本黑色RGB(0,0,0),设置注释的背景色为红色RGB(150,0,0),实际注释背景色RGB(120,0,0)

  3.纯文本黑色RGB(0,0,0),设置注释的背景色为红色RGB(100,0,0),实际注释背景色RGB(80,0,0)

很明显的结论:

  纯文本黑色条件下:实际注释的背景色R = 设置注释的背景红色R * 0.8

  记作:Real_R = Remark_R * 0.8            (规则1)

同理,测试了G,B两位的像素值规律,仍然满足上面的结论。

所以:在纯文本的黑色条件下,上面的规律可以用来计算变量 int_my_color 的背景色吗?

再次测试:

变量int_my_color 实际背景色像素值RGB(175, 179, 163),各位除以0.8,计算得到的像素值RGB(218.75,223.75,203.75),有小数。

    而像素值会取整,所以有:218.75<R<218.75+1/0.8,可以得到

        R=219,G=224,B=204

所以理论上:设置变量int_my_color高亮显示的背景像素值RGB为(219,224,204),#DBE0CC,14409932

于是,去《SharedSettings.xml》里搜索14409932,仍然搜不到!!!


做到这里。。。总结一下:

  虽然最后得到的理论RGB(219,224,204) 满足推断1:VS2015显示的背景色不是由单一设置的颜色来决定的,它可能是两个背景色RGB值的叠加,并且满足规则1:纯文本黑色条件下:实际注释的背景色R = 设置注释的背景红色R * 0.8

  但在《SharedSettings.xml》里搜不到,就意味着哪里错了。

可能是:

  推断2:VS2015显示的背景色不是由单一设置的颜色来决定的,它可能是三个(及以上)背景色RGB值的叠加。


三个及以上的变量叠加,这个复杂度。。。

我选择了笨办法:一个个试试。。。

使用分段查找思想: 一次多设置几个——然后确认——观察 int_my_color 背景色有没有改变。。。

最后的最后,终于让我试出来了!就是这个“突出显示的引用”。

我们再看看像素值:

  实际注释的背景RBG(175,179,163)  是否等于  设置注释的背景RGB(219,224,204)*0.8 

    219 * 0.8 = 175.2,取整175

    224 * 0.8 = 179.2,取整179

    204 * 0.8 = 163.2,取整163

完全符合上面的推断过程!!!说明规则1:

  纯文本黑色条件下:实际注释的背景色R = 设置注释的背景红色R * 0.8

    记作:Real_R = Remark_R * 0.8

是对的。只是(219,224,204)对应的像素值#DBE0CC,14409932 在《SharedSettings.xml》是真的搜不到。(可能还是把这个值叠加到了某个字段的Background里)

耗费三个小时,终于搞清楚了。

记一次VS2010和VS2015自定义颜色的过程的更多相关文章

  1. Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题

    作者: zyl910 一.缘由 "Sandcastle Help File Builder"(简称SHFB)是一个很好用.NET 帮助文档生成工具. 但它的每个版本支持的VS版本范 ...

  2. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  3. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  4. 记一次IIS站点出错的解决过程

    记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...

  5. 记一次Linux系统被入侵的过程

    记一次Linux系统被入侵的过程 1. 前期现象 前期现象,宋组那边反应开发环境192.161.14.98这台机器通过公网下载文件,很慢,ping百度丢包严重.因为这台机器是通过楼下adsl拨号上网, ...

  6. 性能测试——记weblogic 连接池满无法链接故障诊断过程

    记weblogic 连接池满无法链接故障诊断过程 前段时间公司负责建行的一个票据系统在,上线前几个分行试运行环境下,每天后台日志都会报oracle.jdbc.xa.OracleXAException, ...

  7. Windows开发环境搭建(安装 VS2010, VS2013, VS2015 Community, Windows Server 2008 R2)

    1. 安装VS2010 1.1 安装步骤 1. 注意安装的时候,选择自定义安装,将不需要的VB.net去掉. 2. 看一下C++下的x64选项是否选择了,如果没选,将其选上. 3. 一定要将 Micr ...

  8. VS2010和VS2015的Dll项目

    最近在使用公司VS2010开发的老的项目时,发现一些问题 公司用VS2010开发了一个项目,生成 GUS_TestIdentity.dll, 放在 C:\Windows\assembly 中 当在另一 ...

  9. 使用vs2010打开vs2015的项目

    本来在单位项目一直使用vs2010写,五一放假拿回家 ,用vs2015捣鼓了一下 当然向下兼容打开毫无问题,结果回来悲催了,用vs2010打不开了 ,打不开. 记得以前有个转换向导,可是这次没看见,一 ...

随机推荐

  1. Java:重载和重写

    Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...

  2. 【技术博客】在Unity3d中实现烟花效果

    在游戏开发中,我们经常需要用到类似烟花的效果.在Unity3d中,实现烟花效果的方法不止一种,我选用了Unity3d中新添加的粒子特效工具--visual effect graph来进行实现. 实现过 ...

  3. 基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中

    基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中 一.背景 二.实现方案 1.基于@ComponentScan注解实现 2.基 ...

  4. 零基础学习Linux必会的60个常用命令

    Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令. ...

  5. 21.10.18 test

    可可大神出题,四款有趣的游戏推荐,第四个好玩/se T1 loopers \(\color{green}{100}\) 考虑钦定 \(a_1,a_i\) 的位置,固定左边一坨,那么剩下的一坨的 \(\ ...

  6. Spring Cloud Alibaba 使用Nacos作为配置管理中心

    为什么需要配置中心? 动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署 ...

  7. 无缓存交换 牛客网 程序员面试金典 C++ Python

    无缓存交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值. 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回 ...

  8. Android Jetpack Compose 引入示例工程

    引入 Jetpack Compose 示例工程 去GitHub上找到Compose的示例工程 https://github.com/android/compose-samples ,clone到本地 ...

  9. JMeter源码导入到Intellij IDEA (八)

    亲测:jmeter源码导入Intellij IDEA,导入,编译,运行! 一.环境:windows10操作系统,jdk1.8,Intellij IDEA 2018.3,jmeter5.0 下载jmet ...

  10. electron获取不到remote

    electron获取不到remote 问题 // 渲染进程 let remote = require('electron').remote console.log(remote) // undefin ...