« FPGAカンファレンスに出展します! | トップページ | 子ウィンドウによってツールバーが変わる »

2008.09.02

状況感応型ヘルプの作成

MITOUJTAGに状況感応型ヘルプを実装してみました。

MITOU JTAG

最近のヘルプはHTMLで記述するHTML Helpが主流なのですが、私の大好きなBorland C++ BuilderはHTMLヘルプに対応していません。なので、F1キーの捕捉とヘルプの呼び出しを自分で作る必要があります。
今まで状況感応型ヘルプを作るのはめんどくさいと思い込んでいたのですが、実際に作ってみると意外と簡単でした。

まず、アプリケーションの起動時に、WindowsAPIのSetWindowsHookEx関数を使ってフックを仕掛けます。
 SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyHookProc,0,GetCurrentThreadId());

こうすると、なんらかのキーが押された場合にKeyHookProcという関数へ飛ぶようになります。

その飛んだ先の関数はこんな形
 LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wparam, LPARAM lparam)
をしているのですが、F1キーが押されたときには、呼び出される際の引数が
nCode == HC_ACTION かつ (wparam == VK_F1) かつ !(lparam & 0xc0000000)
となります。
なお、!(lparam & 0xc0000000) も条件に加えておかないと、キーを押しっぱなしにしたりキーを離したときでもヒットしてしまいます。

上記の条件からF1キーが押されたと判断したら、WindowsAPIのHtmlHelp()という関数を呼び出せばよいだけです。この関数は、
 HtmlHelp(GetDesktopWindow(),ヘルプファイル名,HH_HELP_CONTEXT,ヘルプコンテキストID);
という形をしています。
ヘルプコンテキストIDに適当な数字をいれることで、目的のトピックが表示されます。
このIDは、HTML Help Workshopで指定したIDと同じです。
あとはアプリケーションが状況に応じてこのIDをセットしてやればよいということになります。

また、メイン画面の下にこういうタブを作ってみました。

Mjpro20080902_2_2

MITOUJTAG ProはMDIアプリなので、いろんな画面が同時に開きます。
実際に使ってみると、いろいろな画面を切り替えるために、[ウィンドウ]→[2]とかやっていると面倒でした。

やはり、画面切り替えにはタブが一番だと感じました。


|

« FPGAカンファレンスに出展します! | トップページ | 子ウィンドウによってツールバーが変わる »

コメント

コメントを書く



(ウェブ上には掲載しません)




« FPGAカンファレンスに出展します! | トップページ | 子ウィンドウによってツールバーが変わる »