在 Win32 上 Task Dialog标准按钮的文本“确定”、“取消”、"is"、“否”等会自动以系统语言显示。如果软件的语言与系统的语言不同,这可能会成为问题。
例如,如果客户在英语 Windows 上安装我们软件的法语版本,则任务对话框的内容将为法语,但任务对话框底部的标准按钮无论如何都将为英语。
有谁知道我如何更改这些文本。
这个问题类似于this SO question它正在处理属性表。
更新:
我尝试从 CTaskDialog
派生一个类并重写 OnInit()
方法,以获取 CTaskDialog 的 m_hWnd
并采用类似的方法比前面提到的问题要多,但不幸的是 CTaskDialog::m_hWnd
是私有(private)的:
class CMyTaskDialog : public CTaskDialog
{
public:
CMyTaskDialog(_In_ const CString& strContent, _In_ const CString& strMainInstruction, _In_ const CString& strTitle,
_In_ int nCommonButtons = TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON, _In_ int nTaskDialogOptions = TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS,
_In_ const CString& strFooter = CString());
virtual HRESULT OnCreate();
};
CMyTaskDialog::CMyTaskDialog(_In_ const CString& strContent, _In_ const CString& strMainInstruction, _In_ const CString& strTitle,
_In_ int nCommonButtons, _In_ int nTaskDialogOptions,
_In_ const CString& strFooter) :
CTaskDialog(strContent, strMainInstruction, strTitle,nCommonButtons, nTaskDialogOptions, strFooter)
{
}
HRESULT CMyTaskDialog::OnCreate()
{
// tried to do stuff with m_hWnd, but m_hWnd is private :-(
return __super::OnCreate();
}
然而,这是一个非常糟糕的主意,它可以正确完成,如下面我自己的答案所示。
最佳答案
其实很简单:
不要使用标准按钮 TDCBF_YES_BUTTON
、TDCBF_NO_BUTTON
、TDCBF_CANCEL_BUTTON
等。您不需要使用这些按钮,而是添加自己的按钮使用 AddCommandControl
,并在 nTaskDialogOptions
参数中使用 0 创建 CTaskDialog
对象,从而禁用 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 在同一任务对话框中拥有命令链接和按钮可能不是最好的主意。
关于c++ - 替换 Windows 任务对话框中的文本 “OK” 、 “Cancel” 、 “Yes” 、 “No”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50150814/