什么?
我有一个从资源DLL加载的DLGTEMPLATE,如何在运行时以编程方式更改分配给控件的字符串?
我希望能够在创建对话框之前执行此操作,以便我可以告诉显示的字符串来自资源DLL,而不是在初始化对话框时调用SetWindowText.
Google已经找到了在代码中创建DLGTEMPLATE的示例,或者在简单样式位上进行编辑,但在编辑内存中的字符串时没有任何内容.
怎么样?
我通过挂钩Dialog/Property Sheet创建API来做到这一点.这使我可以在创建实际对话框之前和具有HWND之前访问DLGTEMPLATE.
为什么?
我希望能够进行运行时本地化和本地化测试.我已经实现了加载字符串(包括MFC 7.0包装器),菜单和加速器表,但我正在努力处理对话框/属性表创建.
代码示例将是完美的答案,理想情况下是一个环绕DLGTEMPLATE的类,如果我找到自己的解决方案,我会发布它.
您无法编辑内存中的字符串.DLGTEMPLATE结构是资源dll的相关字节的直接文件映射.多数民众赞成只读.
您将需要处理整个DLGTEMPLATE结构并写出一个带有更改长度字符串的新结构.
坦率地说,只需挂钩WM_INITDIALOG并通过与控件交互来改变字符串比构建DLGTEMPLATE编写器更容易.因为周围没有很多人.除非您有额外的要求将更改的对话框资源实际保存到磁盘作为原始.res文件(或尝试修改.dll inplace),否则我建议您避免使用此方法.
你说你已经在为accellerator表和菜单字符串做这个 - 如果你可以保证修补后的字符串会更短,那么只需制作DLGTEMPLATE结构的二进制副本,并编写查找所需的非平凡扫描代码每个字符串,以便您可以将副本修补到位.