none
怎么点击其他区域隐藏窗口 RRS feed

  • 问题

  • 我想在一个地方(比如说按钮或图片)点击,然后弹出一个窗口, 然后再次点击这个地方,窗口消失

    除此之外,点击窗口之外的其他地方可以用wm_KILLfocus 来实现。

    但问题是 如果窗口已经出现,如果我点击让窗口出现的地方(按钮或图片),这是窗口先收到wm_KILLfocus事件

    这时,把窗口隐藏或干掉,接着按钮或图片收到点击事件,这时判断到窗口已经隐藏,又把窗口重新显示了出来,

    不能达到点击除窗口外其他地方消失的目的。

    请问有啥方法可以避开这种情况么?

    2012年9月26日 16:49

答案

  • CXXXDlg m_dlgPopup; // 定义为类的成员变量

    // 初始化地方
    if(NULL == m_dlgPopup.GetSafeHwnd())
    {
      m_dlgPopup.Create(CXXXDlg::IDD, this);
    }

    // 点击函数中
    ASSERT(m_dlgPopup.GetSafeHwnd());
    BOOL bShowWindow = ::IsWindowVisible(m_dlgPopup.GetSafeHwnd())
    m_dlgPopup.ShowWindow(bShowWindow ? SW_HIDE : SW_SHOW);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月28日 8:49
    版主

全部回复

  • 你是想实现 ComboBox 的效果么?

    请使用SetCapture和ReleaseCapture来实现。

    2012年9月27日 2:00
  • CXXXDlg m_dlgPopup; // 定义为类的成员变量

    // 初始化地方
    if(NULL == m_dlgPopup.GetSafeHwnd())
    {
      m_dlgPopup.Create(CXXXDlg::IDD, this);
    }

    // 点击函数中
    ASSERT(m_dlgPopup.GetSafeHwnd());
    BOOL bShowWindow = ::IsWindowVisible(m_dlgPopup.GetSafeHwnd())
    m_dlgPopup.ShowWindow(bShowWindow ? SW_HIDE : SW_SHOW);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月28日 8:49
    版主
  • 用消息钩子获取点击窗口的消息回调,然后加入代码忽略掉你不想要的消息即可

    0xDEADBEEF

    2012年9月30日 12:36
    版主