在Windows任务对话框中替换文本“确定”,“取消”,“是”,“否”

时间:2018-05-03 08:52:22

标签: c++ windows winapi mfc taskdialog

在Win32 Task Dialog上,标准按钮的文本“OK”,“Cancel”,“Yes”,“No”等将自动以系统语言显示。如果软件的语言与系统的语言不同,则可能会出现问题。

例如,如果客户在英语Windows上安装我们软件的法语版本,任务对话框的内容将使用法语,但任务对话框底部的标准按钮将以英语显示,无论如何。

有谁知道如何更改这些文本。

这个问题类似于处理属性表的this SO question

更新

我尝试从CTaskDialog派生一个类并覆盖oder中的OnInit()方法以获取CTaskDialog的m_hWnd并采用与之前提到的问题类似的方法,但不幸的是{{ 1}}是私人的:

CTaskDialog::m_hWnd

然而,这是一个非常糟糕的想法,它可以正确完成,如下面我自己的答案所示。

1 个答案:

答案 0 :(得分:3)

实际上非常简单:

您不需要使用标准按钮TDCBF_YES_BUTTONTDCBF_NO_BUTTONTDCBF_CANCEL_BUTTON等,而是使用非这些按钮,但使用AddCommandControl添加自己的按钮,然后创建CTaskDialog参数中带有0的nTaskDialogOptions对象,从而禁用TDF_USE_COMMAND_LINKS模式。然后这些按钮不会显示为命令链接,而是显示为简单的按钮。

最小例子:

  CTaskDialog taskDialog(L"", L"Voulez-vous enregistrer les modifications?",
                         L"Some title", 0, 0);

  taskDialog.AddCommandControl(100, L"Oui");
  taskDialog.AddCommandControl(102, L"Non"); 
  taskDialog.SetDefaultCommandControl(100);
  INT_PTR x = taskDialog.DoModal();
  ...

enter image description here

但是有一个问题:你不能在同一个任务对话框中有按钮一个命令链接。但是这个问题很小(至少对我而言)是因为IMO在同一个任务对话框中有命令链接按钮可能不是最好的想法。