描述:
做一个对话框,上面有两个按钮,button1,button2,button1是默认按钮,还有一个编辑框edit1,假设两个按钮点击后什么也不做,即没有响应点击消息,现在如下操作:
第一步:
在button2上点击一下,效果是:
button1失去默认按钮的外观(它还是默认按钮),button2得到默认按钮的外观(其实并非默认按钮,微软就是这样做的),这些都很正常!
第二步:
这时候把鼠标移到edit1上,点击一下(使button2失去焦点,其实不一定非要在edit1中点击鼠标,我只是为了好表达),效果是:
button2失去焦点变成他本来的样子,而button1从新得到他的默认外观,这些相信大家没有不同意的吧?
但把这个对话框作为ActiveX控件的子窗口(带界面的ActiveX),并用于网页中,问题就来了:
还是按上面的两步操作,第一步正常,当操作完第二步的时候,问题表现出来,button2虽然失去焦点,但没有变成他本来的样子,button1也没有变成他应该变成的样子(默认按钮外观)!!
在做带界面的ActiveX的时候,我遇到的问题远不止这些,比如让对话框接收TAB、回车、回退、方向键等就没少打麻烦,不信大家可以试试(要把这个ActiveX用于网页中才会表现出来这些问题),我想这个问题要想解决,必需要知道ActiveX的实现机制,以及IE的处理机制等,所以还请高手帮忙!
另外我上面提到处理TAB、回车、回退、方向键等,大家不要就这个问题发表看法,我不是问这个问题的,因为一回答肯定想当然的说在CXXXXDlg::PreTranslateMessage(MSG* pMsg)中处理,其实在style:child; border:none; title bar:unchecked 的对话框中,
PreTranslateMessage函数从来没有被调用过(用在ActiveX中,并放在网页中,如果不合乎上面的条件,可能并不会得到我说的结果),不信大家在其中加一条打印语句试试看!
解决方案1:
1。PreTranslateMessage
需要实现相应的接口,才回调用
2。还有一些特殊要求,比如F5 F1 F4 F6 F11等等,需要键盘钩子