我用ATL写了一个很简单的EDIT的控件,把它放到VB的上的时候,只要在此控件中输入tab或上下左右键,VB就会把焦点从控件中移开。当然VB自带的edit控件在输入tab键的时候也会丢失焦点,但是它可以接受上下左右键。我试验了好多久,一直没有找到如何让我的控件能够接受tab和上下左右键的方法。这里恳请有经验的高手指点一二,本人不胜感激。
   为了把问题解释的更清楚一些,各位可以做如下试验。
第一步:用VC创建一个test工程,类型选择MFC ActiveX ContralWizard 按OK。(选MFC比ATL叙述起来简单一些)
第二步:选Next来到MFC ActiveX ContralWizard Step 2 of 2向导对话框,在Which Window Class组合框中选EDIT,按Finish,生成test工程。
第三步:生成test.ocx
第四步:新建一个VB工程,引用test部件,在主form中拉一个test控件,和一个buttom控件,运行。
运行的时候你会发现,只要在test中敲入方向键,焦点就会移到buttom中。
请问如何做可以使得test控件可以接受tab和上下左右键,如果接受tab有困难,能够接受上下左右键也可以。

解决方案 »

  1.   

    你重载PreTranslateMessage拦截tab和上下左右试试
      

  2.   

    在ATL下,我重载PreTranslateAccelerator,开始的时候为了不让VB的包容器取得TranslateAccelerator的控制权,我简单的返回true,这样的话虽然焦点是不会切换了,可是光标却不会跟做左右键动,后来我将用来传给TranslateAccelerator返回的hRes设置为S_FALSE,居然顺利通过了。
       在MFC下,只有PreTranslateMessage可以重载,可是我查看了一下COleControl::XOleInPlaceActiveObject::TranslateAccelerator的实现,发现在PreTranslateMessage无论我怎么做都不能让TranslateAccelerator函数返回S_FALSE,这样我就无法取得我需要的效果,也许只有截获TranslateAccelerator的实现才有得搞!
       由于我得控件是ATL做的,所以我得问题可以说是解决了!无论怎么样,非常感谢你得帮助,我在下面还有一个帖子
    http://community.csdn.net/Expert/topic/4235/4235347.xml?temp=.1208155
    有空得话去一下,我好把两百分都给你。