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

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

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

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

Этот вопрос похож на этот ТАК вопрос который имеет дело с листами собственности.

ОБНОВИТЬ:

Я пытался извлечь класс из 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();
}

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

2

Решение

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]