我在系统托盘创建了一个图标,右键点击这个图标的时候会弹出一个窗口。现在我希望在窗口以外的地方点击一下就可以将窗口隐藏,请问应该怎样做到。谢谢
(我知道SetForegroundWindow()可以做到,但是我希望有其他的方法)

解决方案 »

  1.   

    偶也只知道SetForegroundWindow()可以
    但是为什么你不可以用SetForegroundWindow()呢
      

  2.   

    应该是菜单窗口吧。
    这个的确是Windows系统的一个bug,还可以给你的主窗口发送
    PostMessage(hWnd, WM_NULL, 0, 0)
    来解决/
      

  3.   

    这个说来话长,反正在某些条件下SetForegroundWindow()会让我的菜单不能正常显示,而系统自带的程序,像windows update,防火墙之类的在任何条件下都可以正常显示,所以我相信还有别的方法
      

  4.   

    我的窗口好像不是这样,弹出菜单的函数是:TrackPopupMenu(hMenu, TPM_RIGHTALIGN | TPM_BOTTOMALIGN, point.x, point.y, 0, hWnd, NULL);    
      

  5.   

    MSDN 上的例子程序
    lz 可以试一下if (lEvent==WM_RBUTTONUP) {      // Make first menu item the default (bold font)
          ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);      // Display the menu at the current mouse location. A "bug" in
          // Windows 95 that requires calling SetForegroundWindow. To find
          // out more, read Q135788 in MSDN.
          CPoint mouse;
          GetCursorPos(&mouse);
          ::SetForegroundWindow(m_nid.hWnd); 
          ::TrackPopupMenu(pSubMenu->m_hMenu, 0, mouse.x, mouse.y, 0,
             m_nid.hWnd, NULL);
          ::PostMessage(m_nid.hWnd, WM_NULL, 0, 0);
      

  6.   

    ::PostMessage(m_nid.hWnd, WM_NULL, 0, 0); 
      

  7.   

    ::PostMessage(m_nid.hWnd, WM_NULL, 0, 0);