以前も質問させていただきましたが、現在、CHtmlViewクラスを派生させ、
ブラウザをカスタマイズしています。
表示されているページにエディットボックスがある場合、
エディットボックスにフォーカスがあるのか、その他の
リンク先にフォーカスがあるのかの判別はできるのでしょうか。
IEでは、リンクにフォーカスがあると、BSキーで[前のページに戻る]機能が
動作します。
この機能を無効にしたいのですが、エディットボックスにフォーカスがあるときは、
1文字削除は行いたいのです。
何か方法がございましたら、ご教授願えないでしょうか。
よろしくお願いいたします。
<開発環境>
Windows 2000 SP2
VC++ 6.0 SP5
IE 5.5
>IEでは、リンクにフォーカスがあると、BSキーで[前のページに戻る]機能が
>動作します。
とは限りません。てか、逆です。
テキストエディットまたはテキストエリア以外がフォーカスを持っている時、[BS] で
「前に戻る」の動作が起きます。
>この機能を無効にしたいのですが、エディットボックスにフォーカスがあるときは、
>1文字削除は行いたいのです。
試して無いですが、CHthmlView::OnTranslateAccelerator() をオーバーライドして、ど
うにか細工できないですかね?
渋木さん、レスありがとうございます。
> 試して無いですが、CHthmlView::OnTranslateAccelerator() をオーバーライドして、
> どうにか細工できないですかね?
CHthmlView::OnTranslateAccelerator()をオーバーライドしてみましたが、
「'OnTranslateAccelerator' : 'CHtmlView' のメンバではありません。」
というようなコンパイルエラーが発生します。
MSDNには、CHthmlView::OnTranslateAccelerator()は、
「DocHostUIHandler のオーバーライド可能な関数」として挙げられていますが、
何かお約束のコードを入れなければならないのでしょうか。
それとも、「IEからのイベントの取得」の件名のときに、
VC7 の CHtmlView の方が少しやり易いかもしれませんとおっしゃっておられたので、
VC7で対応されているということでしょうか。
BSキーが押下されたかどうかは、PreTranslateMessage()でも
取得できるのですが、それが、エディットボックスにフォーカスがある時なのか
それ以外なのかを判別できず、困っています。
よろしくお願いします。
>それとも、「IEからのイベントの取得」の件名のときに、
>VC7 の CHtmlView の方が少しやり易いかもしれませんとおっしゃっておられたの
で、
>VC7で対応されているということでしょうか。
そうです。
VC6 の CHtmlView は、CHtmlView::OnTnranslateAccelerator() に対応していません。
>BSキーが押下されたかどうかは、PreTranslateMessage()でも
>取得できるのですが、それが、エディットボックスにフォーカスがある時なのか
>それ以外なのかを判別できず、困っています。
フォーカス位置の取得は出来ないと思います。
代わりに、CHtmlView::OnTranslateAccelerator() をオーバーライドして、BS が「前へ
戻る」に変換されるタイミングが捕まえられないかと考えました。
試していないので駄目かもしれません。
ちなみに、CHtmlView に頼るのを止めて自力でブラウザコントロールをホストすれば、
デフォルト状態ではキー入力によるブラウザ操作はすべて無効です。
逆に、自アプリでキー入力をコマンドに変換して、ブラウザコントロールに通知してや
る必要があります。
> そうです。
> VC6 の CHtmlView は、CHtmlView::OnTnranslateAccelerator() に
> 対応していません。
やはり、そうでしたか。
> フォーカス位置の取得は出来ないと思います。
> :
> ちなみに、CHtmlView に頼るのを止めて自力でブラウザコントロールを
> ホストすれば、
> デフォルト状態ではキー入力によるブラウザ操作はすべて無効です。
行き着くところは、自力で作成するしかないってことですね。
開発期間が短期なので、CHtmlViewクラスで何とかしたかったのですが。。。
CHtmlViewクラスでは、無理だとわかっただけでも、収穫です。
ありがとうございました。
