在MFC对话框中启用一个按钮

7

我有两个按钮:

  1. 单选按钮:“十六进制”
  2. 按钮:“A”

我想在用户选择“十六进制”按钮时随时启用“A”按钮(当创建“A”按钮时,其状态为“禁用”),我该怎么做?谢谢大家。

计算器 MFC 应用程序

3个回答

10

你需要使用CButtonEnableWindow函数。

buttonA.EnableWindow( TRUE );
如果你没有 CButton 对象,可以通过调用其ID来使用 GetDlgItem 访问该按钮:
GetDlgItem( IDC_BUTTON_A )->EnableWindow( TRUE );

严格来说,它是 buttonA.EnableWindow(TRUE) 或者简单地写作 buttonA.EnableWindow() - IInspectable
@IInspectable:是的,说得好,不过“true”也可以正常工作,只是会有一个警告 :) - Goz
但是我没有任何处理buttonA的CButton对象。你能给我展示一下处理它的函数吗?非常感谢。 - Phùng Khánh Hiên
1
你必须获取按钮的窗口句柄并发送WM_ENABLE消息,或使用类向导创建一个CButton对象来控制你想要控制的按钮。 - Jeff D.
1
@Jeff:当应用程序更改窗口的启用状态时,系统会发送WM_ENABLE消息。这不是应用程序应该生成的消息之一。 - IInspectable
2
如果您没有CButton,可以使用GetDlgItem(IDC_BUTTON)->EnableWindow(TRUE);。 - Zac

2

您应该使用 ON_UPDATE_COMMAND_UI 机制来启用/禁用对话框中的“ A ”或任何其他按钮。默认情况下,它对于基于对话框的应用程序不可用,但是您可以通过按照此文章轻松启用它们。

您更新函数中的代码将类似于以下内容:

void CCalculatorDlg::OnUpdateButtonA(CCmdUI* pCmdUI)
{
        if( m_ctrlBtnHex.GetCheck() == BST_CHECKED )
        {
            pCmdUI->Enable( TRUE );
        }
        else
        {
            pCmdUI->Enable( FALSE );
        }
}

在您的情况下,由于A、B、C、D、E、F基本上具有相同的状态,因此您可以这样做:

void CCalculatorDlg::OnUpdateButtonA(CCmdUI* pCmdUI)
{
        if( m_ctrlBtnHex.GetCheck() == BST_CHECKED) )
        {
            m_ctrlBtnA.EnableWindow( TRUE );
            m_ctrlBtnB.EnableWindow( TRUE );
            m_ctrlBtnC.EnableWindow( TRUE );
            // so on...
        }
        else
        {
            m_ctrlBtnA.EnableWindow( FALSE );
            m_ctrlBtnB.EnableWindow( FALSE );
            m_ctrlBtnC.EnableWindow( FALSE );
            // so on...
        }
}

0
NameOfYourButton.EnableWindow( TRUE );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接