vc程序中调用一个dll,并调用dll中的一个函数来生成一个新窗体frm_A,frm_A将它的父窗体设为某个另外的窗体(比如IE的sidebar),但A中的EDIT无法接收某些键盘消息,比如退格键。在IE sidebar中显示Html文件也有这个问题,但可以通过实现一些接口,以及响应OnMouseActivate让这些按键可以使用。
但是我不知道如何让sidebar中显示的dll中的窗体也能接收这些消息。显然不能用处理html的方式(它有接口),dll显示出来的是普通窗体,没有IInputObjectSite接口。编程环境是vc6+atl+winXP

解决方案 »

  1.   

    应该是因为frm_a设置了一个ole窗口为它的父窗口,有些键盘消息被截获了,收不到。原因和sidebar中html中的edit窗等不能接收某些键盘消息原因一样的,但我不知道如何处理。frm_a是dll中调出来的,基本可以认为和调用程序没有关系,就一个独立的窗口
      

  2.   

    我自己顶。发现可以获取WM_KEYUP消息,然后用PostMessage给获得焦点的输入控件发消息
    PostMessage(GetFocus(), WM_CHAR, VK_BACK, 0); //delphi不过还有个问题,我想让方向键也起作用,
    PostMessage(GetFocus(), WM_CHAR, VK_LEFT, 0);
    发过去了,但光标没有向左移动,而是输入了一个字符。有人知道怎么做吗?c++,delphi代码都可以
      

  3.   

    自己解决了
    1.hook按键消息,不过对于树目录,退格键无效,网文快捕的树目录也无法使用退格键2.给父窗体发一个msdn上没有公开的消息,类似问题可以通杀了。
      不过还有个小问题,要退出编辑状态需要在编辑框外点两下鼠标。晕,还在继续研究中...