2008年07月20日

【C++系】Alt+GでGoogleツールバーにフォーカスが行く感じ

キーボードで動かせるツールバーなら、キーボードでフォーカス得られないといけないよなぁと思い、GoogleがAlt+Gでやってるような機能を実装する。

どうやってやってんだろうと調べてみたところ、SetWindowsHookEx で WH_KEYBOARD をフックして(対象はIEのスレッド)、フォーカス移動してるっぽい(想像)。

メニューのアクセラレータ的なものがツールバーにも用意されてるのかと思って無駄に何時間も探してしまった。これでもし在ったら泣こう。


staticなCALLBACK関数から、開いてるIEのインスタンス取らないといけないので、インスタンスをスレッドIDをキーにしてstaticなstd:mapに保有させておいて取り出すとかしてみる。

うーん、この処理で良いのだろうか。わからん。


【やったこと】
・map作る
static std::map<DWORD, CKbieBarBand*> bandMap;

・SetSiteで、フック
m_hHook = SetWindowsHookEx ( WH_KEYBOARD, KeyProc, NULL, GetCurrentThreadId() );

・SetSiteで、インスタンス登録しておく
bandMap[GetCurrentThreadId()] = this;

・フックしたプロシージャの関数
static LRESULT CALLBACK KeyProc (int nCode, WPARAM wParam, LPARAM lParam );
//ここで、こんな風にしてインスタンス取る
クラス名* pBand = bandMap[GetCurrentThreadId()];
//で、このインスタンスに用意したフォーカス取る関数呼ぶ幹事

・後は適当にデストラクタで開放


動いてはいる。二窓でも三窓でも動いてはいる。でも、この書き方でホントにええのかなぁという疑問もふと浮かぶ。
posted by MW at 16:48| Comment(0) | TrackBack(0) | C++ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。