首先,是遇到的问题:

  一天,使用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. FastAPI 学习之路(四十二)定制返回Response

    我们想要在接口中返回xml格式的内容,我们应该如何实现呢. from fastapi import FastAPI,Response @app.get("/legacy/") de ...

  2. mac无坑安装nginx

    mac无坑安装nginx 首先需要mac下有一个缺失的软件包的管理器------->homebrew 1.打开终端输入 brew update 说明homebrew已经安装好了 2.继续执行以下 ...

  3. python flask1

    以这个服务端代码为例,简单了解一下flask的运用. 1.app = Flask(__name__)记住就好了 2.@app.route("/")记住就好了:注意括号里的是调用这个 ...

  4. Microsoft Porject Online 学习随手记一:环境创建和数据导入

    没有想像的简单,也没那么复杂 Project OL之前是Dynamics 365 Enterprise P1中的一个模块,目前最新版本只能简单创建并且已经没有Enterprise P1选项. 主要流程 ...

  5. [Beta]the Agiles Scrum Meeting 2

    会议时间:2020.5.11 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 yjy 修复bug将自动评测改为异步HTTP请求 tq 实现查看.删除测试点功能的后端将自动评测改为异 ...

  6. Noip模拟32(再度翻车) 2021.8.7

    T1 Smooth 很水的一道题...可是最傻    的是考场上居然没有想到用优先队列优化... 上来开题看到这个,最一开始想,这题能用模拟短除法,再一想太慢了,就想着优化 偏偏想到线性筛然后试别的素 ...

  7. IRCUT作用

    IRCUT组成原理 IRCUT由两层滤光片组成,一片红外截止或吸收滤光片和一片全透光谱滤光片 白天是红外截止滤光片工作,晚上是全透滤光片工作,白天摄像头可以接收到人眼无法识别的红外线,会导致图像与肉眼 ...

  8. pascals-triangle-ii leetcode C++

    Given an index k, return the k th row of the Pascal's triangle. For example, given k = 3, Return[1,3 ...

  9. DeWeb --- Hello,World!

    1.新建一个DLL,命名为hello.dpr 2.新增一个Form.(File->New->VCL Form - Delphi),建议不要更改单元名称和Form名称,即分别为unit1.p ...

  10. 几十行js实现很炫的canvas交互特效

    几十行js实现很炫的canvas交互特效 废话不多说,先上效果图! 本篇文章的示例代码都是抄的一个叫Franks的老外在yutube上的一个教学视频,他还出了很多关于canvas的视频,十分值得学习, ...