如题,自己做了一个 MFC 的ActiveX,有显示内容,c#调用,嵌入到一个Panel中,然后Panel又嵌入到一个Form中,目前的问题是,在鼠标单击我的控件时,包含控件的Form不能自动被激活,位于最前端显示。请问各位有什么好办法?我个人在OnLButtonDown里调用SetFocus 没作用,调用OnParentNotify也没作用,修改无窗口激活标志无作用,着急在线等mfcc#父窗体激活

解决方案 »

  1.   

    http://support.microsoft.com/kb/150204/zh-cn
    获取正确父窗口了再做其他操作.
      

  2.   

     HWND CMyOleControl::GetActualParent()
       {
           HWND hwndParent = 0;       // Get the window associated with the in-place site object,
           // which is connected to this ActiveX control.
           if (m_pInPlaceSite != NULL)
               m_pInPlaceSite->GetWindow(&hwndParent);       return hwndParent;     // Return the in-place site window handle.
       }
    按照这个获取了正确的窗体,然后设置其SetFocus,还是不行啊
      

  3.   

    通过SPY++去看下窗口之间的关系,先判断下获得的窗口是不是你要setfocus的窗口,然后再看下setfoucs的效果是否是你要达到的效果.我没做过你做的东西,都是IE来调用,只能帮到这里.
      

  4.   

    是不是你的组件里嵌入了popup属性的对话框之类的东西了。当然,不知道C#里有没有消息这一说法的,有的话可以尝试让Activex发送消息给父窗口,然后父窗口触发了这消息再将窗口激活。例如你这里的话,Activex的父窗口是Panel, Panel得到消息后再激活Form
      

  5.   

    通过在C#调用方 自行调用SetFocus暴力解决,还是存在疑惑。