Замена текстов "ОК", "Отмена", "Да", "Нет" в диалогах задач Windows

В диалоговом окне задач Win32 тексты стандартных кнопок "ОК", "Отмена", "Да", "Нет" и т. Д. Автоматически отображаются на языке системы. Это может быть проблемой, если язык Программного обеспечения отличается от языка системы.

Например, если клиент устанавливает французскую версию нашего программного обеспечения в английской Windows, содержимое диалога задач будет на французском языке, но стандартные кнопки в нижней части диалога задач будут на английском языке, несмотря ни на что.

Кто-нибудь знает, как я могу изменить эти тексты.

Этот вопрос похож на этот вопрос SO, который имеет дело со списками свойств.

ОБНОВИТЬ:

Я пытался извлечь класс из CTaskDialog и переопределить OnInit() метод в одере, чтобы захватить CTaskDialog's m_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();
}

Однако это очень плохая идея, это может быть сделано правильно, как показано в моем собственном ответе ниже.

1 ответ

Это на самом деле довольно просто:

Вместо использования стандартных кнопок 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, имеющий командные ссылки и кнопки в одном и том же диалоге задач, вероятно, в любом случае не лучшая идея.

Другие вопросы по тегам