根据文件:
"如果您希望应用程序使用ComCtl32.dll版本6,则必须添加应用程序清单或编译器指令,以指定如果版本6可用,则应使用该版本."
注意上面的逻辑OR?那么这个神秘的编译器指令是什么?
我有一个原生的Win32 C++应用程序,它完全包含在一个.cpp文件中.没有资源文件,清单文件等.我想保持这种方式,但我也想使用视觉样式.
目标独立光栅化 (TIR) 是DirectX 11.1 中的一项新硬件功能,Microsoft用它来改进 Windows 8 中的 Direct2D。AMD 声称TIR 将 2D 矢量图形的性能提高了约 500%。并且与 Nvidia 发生了一些“口水战”,因为Kepler GPU 显然不支持 TIR(以及其他 DirectX 11.1 功能)。TIR 的想法似乎起源于微软,因为他们已经为它申请了专利。
现在 Direct2D 很好,您的操作系统是 Windows,但是是否有一些 OpenGL(可能是供应商/AMD)扩展可以提供对相同硬件/驱动程序 TIR 的访问?我认为 AMD 的处境有点奇怪,因为 OpenGL 没有独立于供应商的 2D 矢量图形扩展;目前只有 Nvidia 正在推广NV_path_rendering,它的架构与 Direct2D 有很大不同。因此,与 Direct2D+Direct3D 世界不同,目前尚不清楚 AMD 为加速 2D 矢量图形而制作的任何东西可以插入(或显示)在 OpenGL 中的什么地方。我希望我的悲观情绪会被下面一个简单的答案所打破。
我实际上在这里发布了各种更新,因为在评论式帖子中没有足够的空间来做这个。关于 TIR 的作用似乎有点混乱,这不仅仅是“没有附加存储的帧缓冲区”。这可能是因为我只在上面链接了最糟糕的专利(但是这是我能在 TIR 上找到的最详细的文件)。我发现最好的 TIR 高级概述是以下来自Sinofsky 博客文章的片段:
为了提高渲染不规则几何体(例如地图上的地理边界)时的性能,我们使用了一种称为目标独立光栅化或 TIR 的新图形硬件功能。
TIR …
我在基于i7的新机器上遇到基于CPUID的代码问题.它将CPU检测为具有8个HT单元的单个核心,而不是4个核心,每个核心具有2个HT单元.
我必须误解从CPU返回的CPUID信息的结果,但我看不出如何.
基本上,我遍历Windows可见的每个处理器,为该线程设置线程关联,然后进行一系列CPUID调用.
args = new CPUID_Args();
args.eax = 1;
executeHandler(ref args);
if (0 != (args.edx & (0x1 << 28)))
{
//If the 28th bit in EDX is flagged, this processor supports multiple logical processors per physical package
// in this case bits 23:16 of EBX should give the count.
//** EBX here is 0x2100800
logicalProcessorCount = (args.ebx & 0x00FF0000) >> 16;
//** this tells me there are 16 logical processors (wrong)
}
else
{ logicalProcessorCount = 1; }
apic …Run Code Online (Sandbox Code Playgroud) CreateTextFormat的文档没有说明字体回退选择,但如果选择了默认(NULL = 系统)集合,那么 DirectWrite 清楚地实现了字体回退。例如,如果我将 Gabriola 字体中未找到的两个字形添加到 DirectWrite SDK 演示应用程序使用的测试字符串中,则 DirectWrite 会从 Segoe UI Symbol 字体中选择丢失的字形。这发生在基本DrawText调用和自定义渲染器(对字体回退不做任何自定义)时,如下所示(唯一的修改是测试字符串):

复选标记和白星来自 Segoe UI Symbol,而不是来自 Gabriola,即使在演示应用程序中只指定了 Gabriola。那么,有谁知道 DirectWrite (CreateTextFormat) 是如何选择后备字体的?
更新。我看到有一个GetSystemFontFallback可以列出后备字体,但它只在 Windows 8.1 中可用(因为它在 IDWriteFactory2 中)。我猜他们已经注意到 API 在枚举后备字体方面的差距。所以我猜在 Windows 8.1 之前没有办法做到这一点,但如果有人知道黑客/解决方法......
更新2。引用MSFT 员工的话:
DirectWrite 具有无法从注册表读取或以任何方式配置的回退数据。但是,在 Windows 8.1 中,引入了允许应用指定其自己的回退的 API。(它类似于用于创建复合字体定义的 WPF API。)
这仍然不能准确解释硬编码算法/替换方案实际上是什么。
如果我在Win32 API中创建一个按钮,默认的conrol主题看起来像Windows 95/98按钮.我记得过去微软论坛告诉我如何获得XP风格,但我不记得如何做到这一点.有没有办法以编程方式或手动更改Win32应用程序中的控件主题?谢谢.