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