1

我有这个代码:

m_pBtnCom = new CButton();
m_pBtnCom->Create(_T("Push"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_TEXT|BS_VCENTER|BS_CENTER, rc, this, BTN_CMT);  

在哪里:

  • this=我的派生CWnd
  • rc =CRect按钮位置
  • BTN_CMT= 按钮 ID

当前上下文:如果我通过调用
禁用父级,即使我调用按钮 ( ) 上的函数,后者仍保持禁用状态;因此,它没有任何作用:单击,工具提示,... 我试图删除,但没有成功CWndEnableWindow(FALSE)EnableWindow(TRUE)m_pBtnCom->EnableWindow(TRUE)
WS_CHILD

问题:当窗口(我的代码中
的参数)被禁用时,是否可以激活按钮?this

4

1 回答 1

1

禁用父窗口时,子窗口不能独立启用。您可以改为启用所有子项,然后返回并启用特定按钮。

请注意,如果您有IDCANCEL按钮,并且禁用了它,那么对话框的关闭按钮也不起作用,并且会让人感到困惑。您可能希望避免禁用取消按钮并覆盖OnCancel

void CMyDialog::enable_children(bool enable)
{
    auto wnd = GetWindow(GW_CHILD);
    while (wnd)
    {
        wnd->EnableWindow(enable);
        wnd = wnd->GetWindow(GW_HWNDNEXT);
    }
}

BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    enable_children(FALSE);
    
    //re-enable one button
    if(GetDlgItem(IDCANCEL)) GetDlgItem(IDCANCEL)->EnableWindow(TRUE);
    return TRUE;
}

void OnCancel()
{
    MessageBox(L"cancel...");
    CDialog::OnCancel();
}   
于 2021-08-21T14:55:16.403 回答