首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何激活位于禁用窗口(CButton)中的按钮(CWnd)?

如何激活位于禁用窗口(CButton)中的按钮(CWnd)?
EN

Stack Overflow用户
提问于 2021-08-06 22:45:48
回答 1查看 122关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
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);  

Where:

  • this = my派生的CWnd class
  • rc = CRect按钮position
  • BTN_CMT =按钮id

当前上下文:

如果通过调用CWnd来禁用父EnableWindow(FALSE),即使我在按钮(m_pBtnCom->EnableWindow(TRUE))上调用函数EnableWindow(TRUE) (m_pBtnCom->EnableWindow(TRUE)),后者仍然是禁用的;因此,对它没有任何作用:单击、工具提示、.

我试图删除WS_CHILD,但没有成功。

问题:

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

EN

回答 1

Stack Overflow用户

发布于 2021-08-21 14:55:16

当父窗口被禁用时,不能独立启用子窗口。相反,您可以启用所有子程序,然后返回并启用特定按钮。

注意,如果您有IDCANCEL按钮,并且禁用它,那么对话框的“关闭”按钮也不能正常工作,并且会引起混淆。您可能希望避免禁用“取消”按钮并重写OnCancel

代码语言:javascript
复制
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();
}   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68688148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档