记一次VS2010和VS2015自定义颜色的过程
首先,是遇到的问题:
一天,使用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自定义颜色的过程的更多相关文章
- Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题
作者: zyl910 一.缘由 "Sandcastle Help File Builder"(简称SHFB)是一个很好用.NET 帮助文档生成工具. 但它的每个版本支持的VS版本范 ...
- 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. ...
- 【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 ...
- 记一次IIS站点出错的解决过程
记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...
- 记一次Linux系统被入侵的过程
记一次Linux系统被入侵的过程 1. 前期现象 前期现象,宋组那边反应开发环境192.161.14.98这台机器通过公网下载文件,很慢,ping百度丢包严重.因为这台机器是通过楼下adsl拨号上网, ...
- 性能测试——记weblogic 连接池满无法链接故障诊断过程
记weblogic 连接池满无法链接故障诊断过程 前段时间公司负责建行的一个票据系统在,上线前几个分行试运行环境下,每天后台日志都会报oracle.jdbc.xa.OracleXAException, ...
- Windows开发环境搭建(安装 VS2010, VS2013, VS2015 Community, Windows Server 2008 R2)
1. 安装VS2010 1.1 安装步骤 1. 注意安装的时候,选择自定义安装,将不需要的VB.net去掉. 2. 看一下C++下的x64选项是否选择了,如果没选,将其选上. 3. 一定要将 Micr ...
- VS2010和VS2015的Dll项目
最近在使用公司VS2010开发的老的项目时,发现一些问题 公司用VS2010开发了一个项目,生成 GUS_TestIdentity.dll, 放在 C:\Windows\assembly 中 当在另一 ...
- 使用vs2010打开vs2015的项目
本来在单位项目一直使用vs2010写,五一放假拿回家 ,用vs2015捣鼓了一下 当然向下兼容打开毫无问题,结果回来悲催了,用vs2010打不开了 ,打不开. 记得以前有个转换向导,可是这次没看见,一 ...
随机推荐
- ThreadLocal部分源码分析
结构演进 早起JDK版本中,ThreadLocal内部结构是一个Map,线程为key,线程在"线程本地变量"中绑定的值为Value.每一个ThreadLocal实例拥有一个Map实 ...
- 从四个方向分析我们可以从linux学到什么
我们真正关心的是自身可以从这个生态圈中获得些什么?说得更直白一点就是,我们可以从linux系统上面学到点什么,它对我们个人的成长和发展有哪些积极的因素.个人觉得,完全可以通过下面四个维度并结合自己的兴 ...
- Java设计模式——模板设计模式
模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...
- 进程间通信消息队列msgsnd执行:Invlid argument——万恶的经验主义
最近在搞进程间通信,首先在我的ubuntu 14.04上写了接口和测试demo,编译和执行都OK,,代码如下: 接口文件ipcmsg.h /* ipcmsg.h */ #ifndef H_MSGIPC ...
- threading python2 和python3
from __future__ import division from __future__ import print_function import threading balance = 0 d ...
- cf17A Noldbach problem(额,,,素数,,,)
题意: 判断从[2,N]中是否有超过[包括]K个数满足:等于一加两个相邻的素数. 思路: 枚举. 也可以:筛完素数,枚举素数,直到相邻素数和超过N.统计个数 代码: int n,k; int prim ...
- Oracle 11G单机 无网络环境静默安装
参考文章https://blog.csdn.net/xiaoyu19910321/article/details/89856514 环境centos 7.6最小化安装 1,关闭防护墙selinux,配 ...
- 从拥有一个阿里云账号开始使用Maxcompute
本教程并不会创建子账户来管理maxcompute,是直接使用主账号来对maxcompute进行管理(强烈不推荐在生产环境中这样做!!) Step1:创建阿里云账号并实名认证 创建一个阿里云账号(使 ...
- 测试平台系列(72) 了解ApScheduler基本用法
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们调研了一下市面上 ...
- 修改记事本PE结构弹计算器Shellcode
目录 修改记事本PE结构弹计算器Shellcode 0x00 前言 0x01 添加新节 修改节数量 节表位置 添加新节表信息 0x02 添加弹计算器Shellcode 修改代码 0x03 修改入口点 ...