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