【问题标题】:How do you disable CBitmapButton?你如何禁用 CBitmapButton?
【发布时间】:2009-03-12 17:57:23
【问题描述】:

如何禁用 CBitmapButton?我尝试使用 m_bitmapbutton.EnableWindow(false);但它不起作用。它仍然会触发一个事件。

如果事件 B 正在执行(从按钮 B),我想要做的是阻止按钮 A 触发事件 A。所以在事件 B 中,我想禁用按钮 A。

【问题讨论】:

    标签: c++ visual-c++ button mfc


    【解决方案1】:

    以下是要检查的事项列表:

    • 您是否为位图按钮的禁用状态定义了图像?
    • 您确定触发了该事件吗?
    • 事件 B 不在线程中,是吗?
    • 您是否在事件 B 开始时执行 m_bitmapbutton.EnableWindow(FALSE) 并在结束时执行 m_bitmapbutton.EnableWindow(TRUE)?
    • 您是否正在执行 BN_CLICKED 通知 ()?或者它可能是一个不同的通知,例如 WM_LBUTTONDOWN Notification()?
    • 您确定变量 m_bitmapbutton 与您的按钮 A 正确关联吗?你可以试试 GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);

    您总是可以只设置一个布尔成员变量来指示按钮 A 已禁用,并在设置此布尔成员时忽略发送给它的任何事件。

    使用this class from CodeProject可能更容易。

    【讨论】:

    • 对这两个问题都是肯定的。这是一个错误吗?除了使用类还有其他选择吗?
    • 我认为你最好使用 CodeProject 按钮
    • 事件 B 不在线程中是吗?您是否在事件 B 开始时执行 m_bitmapbutton.EnableWindow(FALSE) 并在结束时执行 m_bitmapbutton.EnableWindow(TRUE)?
    • 你在做 BN_CLICKED Notification () 吗?或者它可能是一个不同的通知,例如 WM_LBUTTONDOWN Notification ()
    • 您确定变量 m_bitmapbutton 与您的按钮 A 正确关联吗?你可以试试 GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);
    【解决方案2】:

    我想问题是当您参加活动 B 时,该窗口的消息没有被发送。因此,在您完成参加活动 B 并且您再次启用按钮 A 后,他们正在排队和调度。类似的东西:

    1. OnBnClickedButtonB
    2. buttonA.EnableWindow(FALSE) (窗口的鼠标事件正在排队中而不是分派)
    3. buttonA.EnableWindow(TRUE)
    4. ~OnBnClickedButtonB (应用程序调度排队事件,使按钮再次启用)

    这不仅仅是 CBitmapButton 的问题......它应该与任何其他按钮有关(我自己没有尝试过)。

    一种可能的解决方法是在再次启用按钮之前为该窗口调度鼠标事件......虽然我不太喜欢做这种事情......也许有人可以给你一个更好的解决方案:

    void CMyDlg::OnBnClickedButtonB()
    {
        m_buttonA.EnableWindow(FALSE);
    
        //Process button B clicked event 
    
        MSG msg;
        while(PeekMessage(  &msg, 
                    GetSafeHwnd(), 
                    WM_MOUSEFIRST, 
                    WM_MOUSELAST, 
                    PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);  
        }
    
        m_buttonA.EnableWindow(TRUE);
    }
    

    希望对您有所帮助!

    哈维尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-16
      相关资源
      最近更新 更多