相关疑难解决方法(0)

Aero:如何在玻璃上绘制实心(不透明)颜色?

使用GDI +绘制各种颜色:

brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Run Code Online (Sandbox Code Playgroud)

您会注意到在玻璃上没有显示不透明的颜色: 替代文字

我如何在玻璃上画出纯色?


您还会注意到完全不透明的颜色会根据颜色的不同而有所不同:

  • 不透明的黑色:完全透明
  • 不透明的颜色:部分透明
  • 不透明的白色:完全不透明

替代文字

有人能指出我在桌面合成器上的文档,解释了如何处理不同的颜色?


更新3

您还会注意到FillRectangle行为与以下不同FillEllipse:

  • FillEllipse 不透明的颜色会产生不透明的颜色
  • FillRectangle 不透明的颜色部分(或完全)透明

替代文字

请解释非感性行为.

更新4

Alwayslearning建议我改变合成模式.来自MSDN:

CompositingMode枚举

CompositingMode枚举指定如何呈现的颜色与背景颜色组合.此枚举由使用Graphics::GetCompositingMode"图形:: SetCompositingMode"的方法图形类.

CompositingModeSourceOver
Run Code Online (Sandbox Code Playgroud)

指定在渲染颜色时,它与背景颜色混合.混合由要渲染的颜色的alpha分量确定.

CompositingModeSourceCopy
Run Code Online (Sandbox Code Playgroud)

指定在渲染颜色时,它会覆盖背景颜色.此模式不能与TextRenderingHintClearTypeGridFit一起使用.

从描述来看CompositingModeSourceCopy,听起来这不是我想要的选择.从它所施加的限制来看,它听起来像我想要的选项.并且通过禁用合成或透明度,它不是我想要的选项,因为它执行SourceCopy而不是SourceBlend:

替代文字

幸运的是,这不是一个我必须考虑的邪恶,因为它不能解决我的实际问题.构建我的graphics对象后,我尝试更改合成模式:

graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
Run Code Online (Sandbox Code Playgroud)

结果对输出没有影响:

替代文字

笔记

  • Win32原生
  • 不是.NET(原生)
  • 不是Winforms(原生)
  • GDI +( …

aero dwm aero-glass

31
推荐指数
1
解决办法
3617
查看次数

获取Windows 8自动颜色主题的活动颜色

在Windows 8中,我将颜色方案设置为自动,并将我的壁纸配置为在x分钟后更改.配色方案根据活动壁纸而变化.

我正在开发一个WPF应用程序,并希望在Windows更改颜色方案以匹配当前壁纸时更改渐变.

有没有办法获得当前/实际的配色方案并被告知C#的变化?

.net c# wpf winapi windows-8

21
推荐指数
2
解决办法
9287
查看次数

如何在Windows 10上设置玻璃混合颜色?

在Windows 10上使用未记录的SetWindowCompositionAttributeAPI,可以为窗口启用玻璃.玻璃是白色或透明的,如截图所示:

在此输入图像描述

但是,Windows 10"开始"菜单和通知中心(均使用玻璃)都与强调色混合,如下所示:

在此输入图像描述

它是如何做到的?

调查

以下示例中的重点颜色为浅紫色 - 这是设置应用程序中的屏幕截图:

在此输入图像描述

此示例代码中定义AccentPolicy结构具有重音状态,标志和渐变颜色字段:

  AccentPolicy = packed record
    AccentState: Integer;
    AccentFlags: Integer;
    GradientColor: Integer;
    AnimationId: Integer;
  end;
Run Code Online (Sandbox Code Playgroud)

并且州可以具有以下任何值:

  ACCENT_ENABLE_GRADIENT = 1;
  ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
  ACCENT_ENABLE_BLURBEHIND = 3;
Run Code Online (Sandbox Code Playgroud)

请注意,前两个是在这个github gist上找到的.

第三个工作正常 - 这使玻璃.其他两个,

  • 无论背后是什么,ACCENT_ENABLE_GRADIENT都会产生一个完全灰色的窗口.没有透明度或玻璃效果,但绘制的窗口颜色是由DWM绘制的,而不是由应用程序绘制的.

在此输入图像描述

  • ACCENT_ENABLE_TRANSPARENTGRADIENT导致窗口完全涂上强调色,无论其背后是什么.没有透明度或玻璃效果,但绘制的窗口颜色是由DWM绘制的,而不是由应用程序绘制的.

在此输入图像描述

所以这就越来越近了,它似乎是像音量控制小程序一样使用的一些弹出窗口.

这些值不能一起排序,并且GradientColor字段的值除了必须为非零之外没有任何效果.

直接在玻璃窗口上绘图会导致非常奇怪的混合.这里用红色填充客户区(ABGR格式为0x000000FF):

在此输入图像描述

任何非零的alpha,例如0xAA0000FF,都不会产生任何颜色:

在此输入图像描述

既不匹配"开始"菜单或通知区域的外观.

这些窗户是如何做到的?

winapi aero dwm aero-glass windows-10

20
推荐指数
3
解决办法
1万
查看次数

SQL Server Management Studio:静默导入,忽略99.9%的数据

问题

我正在尝试使用SQL Server Management Studio的Import Data任务将数据导入表中.它只带来了26行,原来的49,325行.(编辑:这是99.9%来自的地方:(1-26/49325)*100 = 99.9%

在企业管理器中正确使用DTS会带来所有49,325行.

为什么SSMS没有导入所有行,报告它成功传输了49,325,并且没有遇到任何错误?为什么企业管理器能够正确导入所有49,325行?

Microsoft SQL Server Management Studio版本:10.0.1600.22(从SQL Server 2008开始,今天安装在全新的Windows 7计算机上,应用了SP1)

证明 - 使用SSMS导入

STRTransactions表最初是空的:

在此输入图像描述

Source是以下ContosoFrobManager数据库lithium:

在此输入图像描述

目的地是Grob数据库lithium;

在此输入图像描述

我想从一个(或多个)表复制数据:

替代文字

我想复制STRTransactions表格: 替代文字

您可以附加到现有表,这很好(它是空的).我想启用身份插入.并且不要尝试导入时间戳(因为你无论如何都会抱怨): 替代文字

马上跑,没关系: 替代文字

是的,你要做的事情: 替代文字

我设法在传输49,325行时捕获它,大约在1k标记处: 替代文字

全部完成.成功复制了所有49,325行: 替代文字

这是报告:

执行成功

  • 初始化数据流任务(成功)

  • 初始化连接(成功)

  • 设置SQL命令(成功)

  • 设置源连接(成功)

  • 设置目标连接(成功)

  • 验证(成功)消息警告0x80049304:数据流任务1:警告:无法打开全局共享内存以与性能DLL通信; 数据流性能计数器不可用.要解决此问题,请以管理员身份运行此程序包,或在系统控制台上运行.(SQL Server导入和导出向导)警告0x80047076:数据流任务1:输出"OLE DB源输出"(11)上的输出列"timestamp"(158)和组件"Source - STRTransactions"(1)随后未使用在数据流任务中.删除此未使用的输出列可以提高数据流任务性能.(SQL Server导入和导出向导)

  • 准备执行(成功)

  • 预执行(成功)

  • 执行(成功)

  • 复制到[dbo].[STRTransactions](成功)传输49325行

消息信息0x402090df:数据流任务1:"组件"目标中的数据插入的最终提交 - STRTransactions"(163)"已启动.(SQL Server导入和导出向导)信息0x402090e0:数据流任务1:"组件"目标中的数据插入的最终提交 - STRTransactions"(163)"已结束.(SQL Server导入和导出向导)

  • 后执行(成功)消息信息0x4004300b:数据流任务1:"组件"目标 - STRTransactions"(163)"写入49325行.(SQL Server导入和导出向导)

优秀.全部完成." 写了49325行 ". …

sql-server etl ssms sql-server-2000 enterprise-manager

15
推荐指数
1
解决办法
2万
查看次数

Windows如何改变Aero Glass的颜色?

我正在使用Windows 7 RTM,我想知道控制面板如何能够如此顺利地更新Aero Glass颜色而无需重新启动DWM(uxsms).DwmSetColorizationColor不再工作了......

colors aero dwm

9
推荐指数
1
解决办法
3267
查看次数

是否有GetThemeColor/Visual Styles API的有效参数组合列表

我试图检索任务栏和/或我的应用程序主窗口的背景和文本颜色.原来,Windows 7没有返回正确的颜色.如果我切换到粉红色的主题,Windows 7仍然返回浅蓝色的窗口标题,虽然那不是真的.这发生在使用

GetSysColor(COLOR_ACTIVECAPTION); 
Run Code Online (Sandbox Code Playgroud)

以及使用HTHEME hTheme = OpenThemeData(hwnd,L"WINDOW");

HRESULT result = GetThemeColor(      
                hTheme,
                WP_CAPTION, 
                CS_ACTIVE, 
                TMT_FILLCOLORHINT, 
                &color);
Run Code Online (Sandbox Code Playgroud)

此外,我发现自己尝试各种参数组合来找出标题文本的颜色.我知道microsofts页面

财产标识符部分和国家

但这些数百个参数的大多数组合都是无效的.是否有任何列表和/或描述可以使用哪些组合?

 GetThemeColor(      
                    hTheme,
                    WP_CAPTION, // BP_PUSHBUTTON,
                    CS_ACTIVE, 
                    TMT_CAPTIONTEXT,
                    &color);
Run Code Online (Sandbox Code Playgroud)

返回"未找到元素".

c windows winapi windows-themes windows-7

6
推荐指数
1
解决办法
1491
查看次数

如何检索Windows的主题颜色?

我想有办法用WPF或C#代码隐藏获取用户Windows主题的主题颜色.使用这种颜色我的意思是可以在Windows 7下的个性化\窗口颜色和外观中设置的颜色(我认为也是Vista).我想用这种颜色来制作渐变,就像Trillian 5做的那样. 在此输入图像描述

我试图自己找到它,但不幸的是我没有到达任何地方.显然它不在SystemColors.Whatever.我在MSDN上找到了一些东西,但我无法弄清楚如何使用它,我也不认为这是我想要的.

如果有人能帮助我,我将不胜感激.

c# wpf c#-4.0

4
推荐指数
1
解决办法
2820
查看次数

如何在Windows 8.1中获取WPF窗口的标题栏颜色?

要使用WindowChrome类自定义窗口的外观,我想在Windows 8.1中获得WPF窗口的标题栏颜色.

首先,我试过了

SystemParameters.WindowGlassColor 
Run Code Online (Sandbox Code Playgroud)

但是这个属性但不包括正确的alpha值(它总是255).

其次,我尝试了这个功能:

DwmGetColorizationColor 
Run Code Online (Sandbox Code Playgroud)

它起初似乎工作正常.返回值具有正确的颜色信息,包括alpha通道.但是,在"颜色和外观"对话框中通过滑块更改"颜色强度"时,返回值将远离实际值并指示奇怪的颜色.

那么,有没有人对替代方法或解决方法有所了解?

c# wpf windows-8

2
推荐指数
1
解决办法
2214
查看次数