添加syslink不显示mfc对话框

时间:2014-08-20 06:10:51

标签: c++ mfc comctl32

首先将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控件,对话框工作正常)。可能是什么问题?

3 个答案:

答案 0 :(得分:2)

该pragma导致Microsoft库链接到您的程序。使用这些"共同控制6"您还需要在程序启动期间调用InitCommonControlsEx。

答案 1 :(得分:0)

@ ScottMcP-MVP感谢您的回复。

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

,一切工作正常

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

如果我错了,请纠正我。

答案 2 :(得分:0)

这修复了SYSLink控件

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

你注意到在Dialog表单编辑器中添加一个SYSLink看起来很好但是在运行你的实际应用程序时它会加载一个对话框,完全消除所有控件丢失等等。有人说它根本没有加载对话框..好吧这是修复它的唯一方法。

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

  

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