我有一个单View/Doc的工程,如果你在View上使用鼠标左键单击时,会弹出一个窗口,这个窗口的风格象“金山词霸的解释单词含义的窗口”。当鼠标移动时,这个窗口会自动关闭。
现在的问题是:
如果这个窗口在弹出的时候,MainFrame会失去Focus,所以我不得不显式的调用SetFocus使MainFrame又取回Focus,这时因为刷新的缘故MainFrame会很明显的闪一下。
我期望的是:
我打算在显示这个窗口时根本就不让MainFrame失去Focus,这样MainFrame也就不会闪了,我该怎么做呢?

解决方案 »

  1.   

    让窗口拥有WS_POPUP与WM_EX_TOOLWINDOW风格试试?
      

  2.   

    SetWindowPos(....... SP_NOACTIVE)
      

  3.   

    之所以会LOST FOCUS是由于API函数SHOWWINDOW作的怪(原因未知),如果你的窗口用SetWindowPos,同时将要显示的窗口放在TOPMOST就可以了。
      

  4.   

    阿笨猫上次的回答:
    CMainFrame::YourMethod() {
      SetRedraw(FALSE);
      pChild->ShowWindow(SW_SHOW);
      SetRedraw(TRUE);// CMainFrame的
    }
    我的情况是:
    那个窗口不是MainFrame的子窗口,那个窗口显示不显示是由它自己控制的,我试了一下,好像不行
      

  5.   

    是我写的不够清楚?CYourWnd::YourMethod() {
      SetRedraw(FALSE);
      pChild->ShowWindow(SW_SHOW);
      SetFocus();  // 我忘记写这一句了吗?
      SetRedraw(TRUE);// CYourWnd的
    }
      

  6.   

    营营的回答:
    SetWindowPos(....... SP_NOACTIVE)
    我试了一下,也好像不行
      

  7.   

    wanglei888(阿笨猫):你好!你的第二个答案我也试过了,好像也没有效果
      

  8.   

    我的窗口已经是 WS_POPUP与WM_EX_TOOLWINDOW风格了,也不行
      

  9.   

    反正以前我用的是行的,不过现在不太记得了,不是ShowWindow就是BringWindowToTop或者就是SetForegroundWindow,可以保证一定行的,哥们相信我,别的我拿不准,不过这个肯定是有个行的
      

  10.   

    在视图类中重载函数OnMouseActive,以专门将焦点设置到视图
      

  11.   

    ShowWindow(hwndPopup, SW_SHOWNOACTIVATE);
    可以实现。
    SW_SHOWNOACTIVATE在MSDN中查不到,查查Winuser.h就可以看到了
    相关的还有SW_SHOWMINNOACTIVE。