Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何禁用CBitmapButton?_C++_Visual C++_Button_Mfc - Fatal编程技术网

C++ 如何禁用CBitmapButton?

C++ 如何禁用CBitmapButton?,c++,visual-c++,button,mfc,C++,Visual C++,Button,Mfc,如何禁用CBitmapButton?我尝试使用m_bitmapbutton.EnableWindow(false);但它不起作用。它仍然触发一个事件 我试图做的是防止按钮A在事件B正在执行时触发事件A(从按钮B)。因此,在事件B中,我想禁用按钮A。以下是要检查的事项列表: 是否为位图按钮的禁用状态定义了图像 您确定事件已触发吗 事件B不在线程中,是吗 您是否在事件B的开头执行m_bitmapbutton.EnableWindow(FALSE)操作,在事件B的结尾执行m_bitmapbutton

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


我试图做的是防止按钮A在事件B正在执行时触发事件A(从按钮B)。因此,在事件B中,我想禁用按钮A。

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

  • 是否为位图按钮的禁用状态定义了图像
  • 您确定事件已触发吗

  • 事件B不在线程中,是吗
  • 您是否在事件B的开头执行m_bitmapbutton.EnableWindow(FALSE)操作,在事件B的结尾执行m_bitmapbutton.EnableWindow(TRUE)操作

  • 您是否正在执行BN_单击通知()?或者它可能是一个不同的通知,比如WM_LBUTTONDOWN通知()

  • 是否确定变量m_bitmapbutton与按钮A正确关联?您是否可以尝试使用GetDlgItem(IDC按钮)->EnableWindow(错误)
您可以始终只设置一个布尔成员变量来指示按钮a已禁用,并在设置此布尔成员时忽略发送给它的任何事件


它可能更容易使用。

我想问题是,当您参加活动B时,此窗口的消息没有被发送。因此,在您完成参加活动B并再次启用按钮A后,他们将排队并退出。诸如此类:

  • 点击按钮
  • 按钮a.启用窗口(错误) (窗口的鼠标事件正在排队,而不是调度)
  • 按钮a.启用窗口(真)
  • ~onbn单击按钮b (应用程序调度排队事件,以便再次启用按钮)
  • 这不仅仅是一个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);
    }
    
    希望这有帮助


    哈维尔

    两个问题都是肯定的。这是虫子吗?除了使用这个类,还有其他选择吗?我认为你最好使用CodeProject按钮。B不是在线程中,是吗?您是否在事件B的开头执行m_bitmapbutton.EnableWindow(FALSE)操作,在事件B的结尾执行m_bitmapbutton.EnableWindow(TRUE)操作?是否在执行BN_单击通知()?或者它可能是一个不同的通知,例如WM_LBUTTONDOWN通知()。您确定变量m_bitmapbutton与您的按钮a正确关联吗?您是否可以尝试使用GetDlgItem(IDC按钮)->EnableWindow(错误);