На 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();
}
Однако это очень плохая идея, это может быть сделано правильно, как показано в моем собственном ответе ниже.
Это на самом деле довольно просто:
Вместо использования стандартных кнопок 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 есть командные ссылки а также кнопки в одном и том же диалоге задач, вероятно, не самая лучшая идея.
Других решений пока нет …