【问题标题】:adding syslink not displaying mfc dialog box添加 syslink 不显示 mfc 对话框
【发布时间】: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 控件,则对话框工作正常)。可能是什么问题?

【问题讨论】:

    标签: c++ mfc comctl32


    【解决方案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 版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-14
          相关资源
          最近更新 更多