替换 Win32 属性表中的文本“OK”、“Cancel”、“Apply”和“Help”

Posted

技术标签:

【中文标题】替换 Win32 属性表中的文本“OK”、“Cancel”、“Apply”和“Help”【英文标题】:Replacing texts "OK", "Cancel", "Apply" and "Help" in Win32 property sheets 【发布时间】:2013-03-14 14:44:42 【问题描述】:

在 Win32 属性表上,文本“OK”、“Cancel”、“Apply”和“Help”会自动以系统语言显示。如果软件的语言与系统的语言不同,这可能是个问题。

例如,如果客户在英文 Windows 上安装我们软件的法文版本,则属性表的内容将为法文,但属性表底部的标准按钮无论如何都是英文的。

有谁知道我怎样才能更改这些文本。

【问题讨论】:

你可以change the process's UI language 但我想这只有在你安装了相应的语言包的情况下才有效。语言包仅在更昂贵的 SKU(如 Windows 7 Ultimate 和 Enterprise)上受支持。 这不是一个可行的解决方案。 This answer 更改应用按钮上的文本。 OK 和 Cancel 按钮的控件 ID 是 IDOK 和 IDCANCEL(请参阅MessageBox)。还有一个 IDHELP(值 9)可能对应于帮助按钮,但我没有尝试过。我猜这在 Windows 版本中是一致的,但实际上并没有记录。 【参考方案1】:

实际上更改这些文本非常简单。唯一必须做的就是从 CPropertySheet 派生一个类,重写 OnInitDialog 方法并更改重写的 OnInitDialog 中的文本。

class CMyPropertySheet : public CPropertySheet

public :
  CMyPropertySheet() ;

protected:
  virtual BOOL OnInitDialog();

  DECLARE_MESSAGE_MAP()
 ;

BOOL CMyPropertySheet::OnInitDialog()

  ...
  SetDlgItemText(IDOK, whatever..) ;
  SetDlgItemText(0x3021, whatever..) ;   // 0x3021 == IDAPPLY
  SetDlgItemText(IDCANCEL, whatever...) ;
  SetDlgItemText(IDHELP, whatever...) ;

【讨论】:

确认 0x3021 在我的 WinXp 机器上也被识别为 IDAPPLY。所有按钮都相对于应用按钮对齐;因此破坏它会导致所有按钮水平错位。

以上是关于替换 Win32 属性表中的文本“OK”、“Cancel”、“Apply”和“Help”的主要内容,如果未能解决你的问题,请参考以下文章

使用 MySQL 查询查找和替换整个表中的文本

使用 MySQL 查询查找和替换整个表中的文本

调整替换所有表中的所有字符串以使用文本

t-sql 用户定义函数,用表中的查找替换文本

从 Excel 工作表中查找并替换所有文本文件中的字符串

怎么将表中的空格都转变为0???