我有一个控件,在ie下使用的无窗体控件。
继承IOleInPlaceObjectWindowlessImpl如何接受自定义消息呀
能不能给个例子?

解决方案 »

  1.   

    http://www.shengfang.org/blog/p/0815vcatlocxusermsgCContainedWindow.php
      

  2.   

    让你的控件从CMessageMap继承,然后使用下面的消息映射宏来接收消息
    BEGIN_MSG_MAP(...)
      // 在这里添加宏来处理所有消息
    END_MSG_MAP()从IOleInPlaceObjectWindowlessImpl 继承的无窗口控件都可以通过消息映射直接响应消息
      

  3.   

    0815vcatlocxusermsgCContainedWindow.php
    的例子我找过,好像不可以。补充一下我的问题,
    我要说的是,我要向控件自身sendmessage,
    然后响应。在sendmessage时,如何获得hwnd呢?
      

  4.   

    向容器发消息,从容器中获得HWND
      

  5.   

    楼上的大哥,能不能详细一些呀。我的控件是在ie中使用的,容器是什么呢?
    那hwnd应该是什么呢?另外问一下,控件如何相应发向容器的消息?
      

  6.   

    发往容器的消息都会转移到控件中,上面已经解释怎么接收消息了。
    因为控件是无窗口的,要给控件发消息,就必须从它的容器中获得HWND,调用IOleInPlaceSiteWindowless::GetWindow(&hwnd),实际上是调用IOleWindow::GetWindow,因为是从IOleWindow继承的,它将取得容器嵌套树中“距离最近”的窗口。
      

  7.   

    我使用GetWindow方法时,
    只有当我点一下 控件后,才可以获得hwnd,
    不点不能获得hwnd, 应该是控件激活的事,这个如何解决呢?
    要实现什么接口,或编写什么代码么?
      

  8.   

    如何能自动激活呢?我单独建了一个atl控件,于我的原来的继承接口一样,结果可以自动激活。
    但是当我把鼠标移动到新的控件上时,仍提示我“单击”来激活控件。不知道哪方面会影响控件的激活
      

  9.   

    如果是ActiveX控件,在IE7下必须先激活,再使用。
      

  10.   

    解决了,
    不知到什么原因,我做的其他的控件可以。
    我对比了一下,好像是.rgs文件中有一点不同。
    修改了后就可以了。谁能解释一下?晚上结贴