小编hum*_*mba的帖子

以编程方式确定系统是否具有可切换的图形

我们在WPF应用程序中使用可切换显卡(AMD Radeon 7670M + Intel 4000)的笔记本电脑上遇到以下问题:

我们用来显示某些视频的D3DImage只显示一个黑框.仅当独立图形(AMD)对应用程序处于活动状态(模式设置为高性能)时才会发生这种情况.英特尔图形处于活动状态(模式设置为省电模式)可以正常工作.看起来我们并不孤单这个问题.搜索谷歌在AMD论坛上发布了以下帖子:

我找到了一个使用D3DImage.CopyBackBuffer的解决方法- 看起来backbuffer确实包含正确的框架 - 所以我会尝试显示它.

但是为了只在必要时应用这种解决方法,这让我想到了这个问题的主题:如何确定系统是否真的具有可切换的图形?
我想可能有一些方法可以使用WMI或查看注册表,但如果有人能指出我正确的方向或者甚至可能有一个例子如何这样做,我会很高兴.

更新:

我尝试过EnumDisplayDevices和System.Management.ManagementObjectSearcher.第一个没有返回所有设备而后者没有.但也许还有更好的方法呢?

.net c# wpf video d3dimage

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

更改非Windows应用商店应用的平铺颜色?

在Windows 8.1中,开始屏幕上桌面应用程序磁贴的背景颜色不再是灰色而是彩色.在我看来,通过计算平均图标颜色并选择默认图块颜色调色板的最接近匹配颜色,Windows选择图块的背景颜色(例如,我们的一个应用程序具有深蓝色和灰色图标但是图块背景仍然是turqouise).是否可以为非Windows Store(桌面)应用程序(可能在应用程序清单中)更改此颜色?

c++ microsoft-metro live-tile windows-8.1

5
推荐指数
1
解决办法
8211
查看次数

删除并重新添加所有项目和所有列时,Listview在Win32对话框上闪烁

考虑一个简单的Win32对话框,其中包含用C++编写的listview控件(在报表模式下).在某个事件中,将删除所有项目和所有列,并创建新的列和项目.基本上,随着内容的更改,将根据内容自动生成列.

删除旧项目/列并添加新项目时,listview会像地狱一样闪烁.我尝试过WM_SETREDRAW并且LockWindowUpdate()没有改变视觉体验.

我甚至设置了扩展列表视图样式LVS_EX_DOUBLEBUFFER,这根本没有帮助.

父对话框已WS_CLIPCHILDREN设置.

有关如何使用尽可能少的闪烁工作的任何建议吗?我正在考虑使用两个列表视图,交替可见性,使用隐藏的一个作为后台缓冲区,但这听起来像是一种矫枉过正.必须有一个简单的方法.

c++ winapi mfc listview listctrl

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

以编程方式确定Windows DPI设置?

我们的一个非dpi感知MFC应用程序出了问题.
如果将系统设置更改为高dpi(例如120或144 dpi),则任务栏上的应用程序图标会变得紧张.不幸的是,我们必须WNDCLASS为大型机注册我们自己的,并且在WNDCLASS.hIcon成员中你必须设置一个图标.使用该LoadIcon功能加载此图标.并且该函数尝试以标准大小加载图像(与返回相同GetSystemMetrics(SM_CXICON)),120dpi为40x40像素.这很不幸,因为我们没有提供这种尺寸的图标.但是有一个解决方法:从奇怪的是,dpi虚拟化似乎没有生效120 dpi,GetDeviceCaps(..., LOGPIXELSX)确实返回120 dpi和GetSystemMetrics(SM_CXICON)返回40.所以我们可以捕获它,只需加载不同大小的图标.但是对于144 dpi它不起作用,因为现在虚拟化似乎生效,我们得到96 dpi和32像素,这再次导致图标看起来非常难看.
我发现如果我只是将WNDCLASS.hIcon成员设置为NULL,则图标显示正常.但是我想知道是否可以,因为根据MSDN:

hIcon
处理类图标.该成员必须是图标资源的句柄.如果此成员为NULL,则系统提供默认图标.

即使我将该成员设置为NULL,我也能依靠显示总是向上的图标吗?另一种方法是以正确的大小加载图标,但为此我必须知道系统实际上设置为144 dpi.在那里,我们处于初步问题.有谁知道是否可以确定系统的DPI设置(来自dpi虚拟化应用程序)?请注意,我还想过做一些脏事,比如有一个dpi识别应用程序告诉我实际的dpi和类似的东西,但我想避免这样的事情,如果可能的话.

最好的祝福,

humbagumba

更新:
我发现将WNDCLASS.hIcon成员设置NULL为不是一个好主意,因为大型图标被替换为默认图标(即使它在任务栏上看起来很好......) - 我没注意到我的第一次考试.

c++ mfc dpi highdpi windows-7

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

在C++/CLI中获取dll的模块文件名的首选方法

我有一个C++/CLI DLL,我想知道Win32 API函数的首选替代方案是什么GetModuleFilename.我找到了Assembly::GetExecutingAssembly()->ManifestModule->FullyQualifiedName(MSDN).这似乎有效,但我想知道是否有不同或"更好"的方式.当然,我知道在技术上没有什么禁止我GetModuleFilename直接使用,但我讨厌混合不同的API,这也需要创建一个字符串缓冲区,然后我必须转换回一个System::String.我知道它只有两行代码但仍然...... ;-)

winapi c++-cli

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