在Win32 Task Dialog上,标准按钮的文本“OK”,“Cancel”,“Yes”,“No”等将自动以系统语言显示。如果软件的语言与系统的语言不同,则可能会出现问题。
例如,如果客户在英语Windows上安装我们软件的法语版本,任务对话框的内容将使用法语,但任务对话框底部的标准按钮将以英语显示,无论如何。
有谁知道如何更改这些文本。
这个问题类似于处理属性表的this SO question。
更新
我尝试从CTaskDialog
派生一个类并覆盖oder中的OnInit()
方法以获取CTaskDialog的m_hWnd
并采用与之前提到的问题类似的方法,但不幸的是{{ 1}}是私人的:
CTaskDialog::m_hWnd
然而,这是一个非常糟糕的想法,它可以正确完成,如下面我自己的答案所示。
答案 0 :(得分:3)
实际上非常简单:
您不需要使用标准按钮TDCBF_YES_BUTTON
,TDCBF_NO_BUTTON
,TDCBF_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();
...
但是有一个问题:你不能在同一个任务对话框中有按钮和一个命令链接。但是这个问题很小(至少对我而言)是因为IMO在同一个任务对话框中有命令链接和按钮可能不是最好的想法。