添加 syslink 不显示 mfc 对话框

Posted

技术标签:

【中文标题】添加 syslink 不显示 mfc 对话框【英文标题】:adding syslink not displaying mfc dialog box 【发布时间】:2014-08-20 06:10:51 【问题描述】:

起初将 syslink 添加到我的对话框中,阻止它打开。我被要求在代码中添加以下行以显示带有“Syslink”控件的对话框。

#pragma comment(linker,"\"/manifestdependency:type='win32'\name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

当我将此行添加到我的 VS 项目时,它运行良好。这行代码是什么意思?

其次,当我在另一个项目的 .rc 文件和 resource.h 文件中为对话框和 syslink 控件添加相同的代码时,当我使用 make 文件编译它时,我遇到了同样的问题。但是这次我添加了#pragma 注释行。 (仅供参考 - 如果我从 rc 文件中删除 syslink 控件,则对话框工作正常)。可能是什么问题?

【问题讨论】:

【参考方案1】:

编译指示将 Microsoft 库链接到您的程序。要使用这些“通用控件 6”,您还需要在程序启动期间调用 InitCommonControlsEx。

【讨论】:

【参考方案2】:

@ScottMcP-MVP 感谢您的回复。

其实我解决了第二个问题。 “/ALLOWISOLATION:NO”在我的生成文件中设置为链接器选项,它构建目标文件和二进制文件,就好像没有清单文件一样。因此,修改清单的“#pragma comment”指令在从 makefile 编译时无效。当我删除该链接器选项时,即使没有调用“InitCommonControls”,一切正常

据我了解,指定的“#pragma directive”在目标文件中添加注释以链接公共控件库,并且它还在清单文件中添加条目以仅在版本为6时链接公共控件库或以上。 (因为 syslink 仅从版本 6 开始定义)

如果我错了,请纠正我。

【讨论】:

【参考方案3】:

这修复了 SYSLink 控件

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' "\    
"version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 

您注意到在对话框表单编辑器中添加 SYSLink 看起来不错,但是在运行您的实际应用程序时,它会加载一个完全空白的对话框,所有缺少的控件等等。有人说它根本不加载对话框。这是修复它的唯一方法。

它失败是因为它需要 unicode 文本支持,默认情况下不加载它位于 Comctl32.dll 文件版本 6 中。

ComCtl32.dll 版本 6 中定义的所有新功能都支持 只有Unicode。因此,您不能创建 SysLink 的 ANSI 版本 控件,只有 Unicode 版本。

【讨论】:

以上是关于添加 syslink 不显示 mfc 对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何在VC++MFC对话框上显示PNG图片?

MFC设置对话框定时显示60秒,然后自动弹出另外一个对话框。怎么给对话框添加最大化最小化按钮。

急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子

VS2010 用MFC文件对话框添加电脑图片显示到图片控件,如何再次点击按钮来继续添加第二张图片呢?

如何在基于 mfc 对话框的应用程序中将选项卡添加到 tabcontrol 并在对话框中间显示选项卡

怎么样在MFC中创建动态控件