Замена текстов «ОК», «Отмена», «Да», «Нет» в диалогах задач Windows - PullRequest
0 голосов
/ 03 мая 2018

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

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

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

Этот вопрос похож на этот вопрос SO , касающийся листов свойств.

UPDATE:

Я попытался извлечь класс из CTaskDialog и переопределить метод OnInit() в oder, чтобы получить m_hWnd у CTaskDialog и использовать тот же подход, что и в предыдущем вопросе, но, к сожалению, 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 Ответ

0 голосов
/ 03 мая 2018

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

Вместо использования стандартных кнопок 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();
  ...

enter image description here

Однако есть одна проблема: у вас не может быть кнопок и a, ссылки на команды в одном диалоге задачи. Но эта проблема незначительна (по крайней мере, для меня), потому что IMO с командными ссылками и в одном и том же диалоге задач, вероятно, в любом случае не лучшая идея.

...