你如何禁用 CBitmapButton?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 后,他们正在排队和调度。类似的东西:

    OnBnClickedButtonB buttonA.EnableWindow(FALSE) (窗口的鼠标事件正在排队中而不是分派) buttonA.EnableWindow(TRUE) ~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);

希望对您有所帮助!

哈维尔

【讨论】:

以上是关于你如何禁用 CBitmapButton?的主要内容,如果未能解决你的问题,请参考以下文章

mfc按钮控件加载bitmap并显示字

MFC 对话框 位图按钮 失去焦点

你如何在swiftUI中禁用navigationBaritems

你如何在python的机械化中禁用javascript?

如何在 Edge 中禁用自动更正?

如何禁用特定端点的身份验证?