当前位置:  开发笔记 > 编程语言 > 正文

如何以编程方式操作DLGTEMPLATE?

如何解决《如何以编程方式操作DLGTEMPLATE?》经验,为你挑选了1个好方法。

什么?

我有一个从资源DLL加载的DLGTEMPLATE,如何在运行时以编程方式更改分配给控件的字符串?

我希望能够在创建对话框之前执行此操作,以便我可以告诉显示的字符串来自资源DLL,而不是在初始化对话框时调用SetWindowText.

Google已经找到了在代码中创建DLGTEMPLATE的示例,或者在简单样式位上进行编辑,但在编辑内存中的字符串时没有任何内容.

怎么样?

我通过挂钩Dialog/Property Sheet创建API来做到这一点.这使我可以在创建实际对话框之前和具有HWND之前访问DLGTEMPLATE.

为什么?

我希望能够进行运行时本地化和本地化测试.我已经实现了加载字符串(包括MFC 7.0包装器),菜单和加速器表,但我正在努力处理对话框/属性表创建.

代码示例将是完美的答案,理想情况下是一个环绕DLGTEMPLATE的类,如果我找到自己的解决方案,我会发布它.



1> Chris Becke..:

您无法编辑内存中的字符串.DLGTEMPLATE结构是资源dll的相关字节的直接文件映射.多数民众赞成只读.

您将需要处理整个DLGTEMPLATE结构并写出一个带有更改长度字符串的新结构.

坦率地说,只需挂钩WM_INITDIALOG并通过与控件交互来改变字符串比构建DLGTEMPLATE编写器更容易.因为周围没有很多人.除非您有额外的要求将更改的对话框资源实际保存到磁盘作为原始.res文件(或尝试修改.dll inplace),否则我建议您避免使用此方法.

你说你已经在为accellerator表和菜单字符串做这个 - 如果你可以保证修补后的字符串会更短,那么只需制作DLGTEMPLATE结构的二进制副本,并编写查找所需的非平凡扫描代码每个字符串,以便您可以将副本修补到位.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有