2

在 Win32任务对话框中,标准按钮的文本“确定”、“取消”、“是”、“否”等会自动以系统语言显示。如果软件的语言与系统的语言不同,这可能是个问题。

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

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

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

更新:

我尝试从中派生一个类CTaskDialog并覆盖该OnInit()方法以获取 CTaskDialogm_hWnd并采用与前面提到的问题类似的方法,但不幸CTaskDialog::m_hWnd的是它是私有的:

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();
}

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

4

1 回答 1

3

其实很简单:

而不是使用标准按钮TDCBF_YES_BUTTON,等TDCBF_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();
  ...

在此处输入图像描述

但是有一个问题:在同一个任务对话框中不能有按钮和命令链接。但是这个问题是一个小问题(至少对我来说),因为 IMO 在同一个任务对话框中具有命令链接按钮可能不是最好的主意。

于 2018-05-03T15:10:47.413 回答