将属性表上的 IDCANCEL 按钮更改为 IDCLOSE 按钮,同时考虑本地化
Changing the IDCANCEL button to a IDCLOSE button on a propertysheet, taking localization into account
这听起来像是一个愚蠢的问题。我知道 CMFCPropertyPage
有一个 CancelToClose
方法,但我找不到 sheet 对象的类似方法。
我基本上希望“取消”按钮始终处于“关闭”状态,并希望在 sheet 对象中做到这一点。
唯一的方法是在每个页面中调用 CancelToClose
吗?
我读了this,现在意识到这不是我想要的。
这就是我想要的 sheet:
- 自定义 预览 按钮。
- 一个关闭按钮。
预览按钮将位于关闭按钮的左侧。我找到了关于添加自定义按钮的教程。
对于关闭按钮,我不确定要做什么。
更新
所以,目前我有:
所以它有 自定义按钮(现有隐藏的 IDOK
按钮所在的位置)。它有 IDCANCEL
按钮。但我希望按钮是“关闭”。
我知道我可以使用 SetWindowText
但我正在考虑本地化,所以我想知道最好的方法是什么。
这就是我最终解决这个问题的方式。我现在从 CMFCPropertySheet::OnInitDialog()
:
调用这段代码
void CVisitsRotaPropertySheet::SetupButtons()
{
CRect rctOK, rctCancel;
CString strButtonText;
// Get the position if the IDOK button
GetDlgItem(IDOK)->GetWindowRect(rctOK);
ScreenToClient(rctOK);
// Get the position of the IDCANCEL button
GetDlgItem(IDCANCEL)->GetWindowRect(rctCancel);
ScreenToClient(rctCancel);
// Hide the IDCANCEL button
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
// Move the IDOK button to be in the same place as the IDCANCEL button
GetDlgItem(IDOK)->MoveWindow(rctCancel);
// Create the PREVIEW button in the original location of the IDOK button
ENSURE(strButtonText.LoadString(IDS_STR_PREVIEW));
m_btnPreview.Create(strButtonText,
BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, rctOK, this, IDC_BUTTON_PREVIEW);
m_btnPreview.SetFont(GetFont());
}
以上代码根据我的需要调整按钮。然后,在我的 CMFCPropertyPage::OnInitDialog()
处理程序中,我调用 CancelToClose()
.
结果:
这听起来像是一个愚蠢的问题。我知道 CMFCPropertyPage
有一个 CancelToClose
方法,但我找不到 sheet 对象的类似方法。
我基本上希望“取消”按钮始终处于“关闭”状态,并希望在 sheet 对象中做到这一点。
唯一的方法是在每个页面中调用 CancelToClose
吗?
我读了this,现在意识到这不是我想要的。
这就是我想要的 sheet:
- 自定义 预览 按钮。
- 一个关闭按钮。
预览按钮将位于关闭按钮的左侧。我找到了关于添加自定义按钮的教程。
对于关闭按钮,我不确定要做什么。
更新
所以,目前我有:
所以它有 自定义按钮(现有隐藏的 IDOK
按钮所在的位置)。它有 IDCANCEL
按钮。但我希望按钮是“关闭”。
我知道我可以使用 SetWindowText
但我正在考虑本地化,所以我想知道最好的方法是什么。
这就是我最终解决这个问题的方式。我现在从 CMFCPropertySheet::OnInitDialog()
:
void CVisitsRotaPropertySheet::SetupButtons()
{
CRect rctOK, rctCancel;
CString strButtonText;
// Get the position if the IDOK button
GetDlgItem(IDOK)->GetWindowRect(rctOK);
ScreenToClient(rctOK);
// Get the position of the IDCANCEL button
GetDlgItem(IDCANCEL)->GetWindowRect(rctCancel);
ScreenToClient(rctCancel);
// Hide the IDCANCEL button
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
// Move the IDOK button to be in the same place as the IDCANCEL button
GetDlgItem(IDOK)->MoveWindow(rctCancel);
// Create the PREVIEW button in the original location of the IDOK button
ENSURE(strButtonText.LoadString(IDS_STR_PREVIEW));
m_btnPreview.Create(strButtonText,
BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, rctOK, this, IDC_BUTTON_PREVIEW);
m_btnPreview.SetFont(GetFont());
}
以上代码根据我的需要调整按钮。然后,在我的 CMFCPropertyPage::OnInitDialog()
处理程序中,我调用 CancelToClose()
.
结果: