この章より、いくつかのステップに分けて、「HmAutoCompleteEx.dll」の利用方法を解説してゆきます。
チュートリアルの最終目標は「プログラミング言語 Perl」用の入力補完拡張用の.dllを作成することになります。
(Perlの話題自体は登場しません。)
話がブレないよう、チュートリアルの目標を統一し、理解を促進するためとなります。
秀丸の「ファイルタイプ別の設定」を利用して、「.pl」という拡張子に対して、
下画像のような設定を施しておきましょう。
これから行っていくチュートリアルの動作確認の上で、
(大切なことは「入力補完のウィンドウ」を出しやすくして確認しやすくすること、
「入力補完ウィンドウ」中に上下等で選択出来るタイプの「リスト」であることです。)
上記ファイルに含まれるプロジェクトを利用していくことで、「HmAutoCompleteEx.dll」上で動作するファイルを作成することが出来ます。
今回の最小サンプルは「入力補完まわりの機能を秀丸で使った時に、コールバック関数が呼ばれる」ので、
それをデバッグモニターで確認できるようにする、というものです。
#include <windows.h> #include "OutputDebugStream.h" #define MACRO_DLL extern "C" __declspec(dllexport) MACRO_DLL int OnCreate(HWND hWnd, LPCTSTR pwszFileName) { OutputDebugStream(L"OnCreate:%s\n", pwszFileName); return TRUE; } MACRO_DLL int OnListBoxSelectedIndexChanged(HWND hWnd, int iListBoxSelectedIndex, LPCTSTR pwszListBoxSelectedItem, int iItemHeight) { OutputDebugStream(L"OnListBoxSelectedIndexChanged:%s\n", pwszListBoxSelectedItem); return TRUE; } MACRO_DLL int OnDestroy(HWND hWnd) { OutputDebugStream(L"OnDestroy\n"); return TRUE; } using AUTOCOMPLETELIST = void; MACRO_DLL AUTOCOMPLETELIST* OnQueryListBoxCustomAdded(HWND hWnd, AUTOCOMPLETELIST *pAutoCompleteOriginalList) { OutputDebugStream(L"OnQueryListBoxCustomAdded:\n"); return NULL; } MACRO_DLL int OnKeyDown(HWND hWnd, WPARAM wParam) { OutputDebugStream(L"OnKeyDown:%c\n", wParam); return TRUE; }
コンパイルする前に、「プロジェクト」の「プラットフォームツールセット」のバージョンが、
今使っているVisual Studioのバージョンと一致するか確認しましょう。
複数のVisual Studioがインストールされていれば別ですが、そうでない限り、プラットフォームツールセットとVisual Studioのバージョンは一致させる必要があります。
(要するにVisual Studio 2015を使ってる人は、下画像の赤線部分をVisual Studio 2015にするということ)
コンパイルすることで、「HmAutoCompleteExPlug.dll」が出来上がりました。
「HmAutoCompleteEx.dll」と「HmAutoCompleteExPlug.dll」を秀丸ディレクトリにコピーしましょう。
HmAutoCompleteEx.dll自体はある程度自由に呼び出せますが、
最も相応しい呼び出し場所は、
秀丸マクロの「自動起動」から「アクティブ切り替え後」あたりで呼び出すといったものです。
#HMACE = loaddll( hidemarudir + @"\HmAutoCompleteEx.dll" ); if (#HMACE) { #_ = dllfuncw( #HMACE, "SetHidemaruHandle", hidemaruhandle(0), filename2 ); #_ = dllfuncw( #HMACE, "BindAutoCompleter", hidemarudir + "\\HmAutoCompleteExPlug.dll", "\\.pl$" ); } else { message("dllが無い"); }
#hmaceをfreedll(FreeLibrary)しないよう注意してください。
秀丸終了時に、#hmaceは自動的にfreedllされます。
普段デバッグモニターを利用していない人は、
当サイトにて秀丸専用のデバッグモニターを提供していますので
こちらを利用してください。
他のデバッグモニターでも問題はありません。
(dbmonなどと検索してください)
適当に「.pl」ファイルを秀丸で開いて、
実際に入力補完をして挙動を確かめてみましょう。
今回コンパイルしたコールバック関数が呼ばれている様子がわかるでしょうか。
どのような入力補完がらみの操作をすると、どの関数がコールバックされるのか、確認すると良いでしょう。
単語補完ウィンドウの生成直後。
単語補完ウィンドウが消滅直前。
単語補完リストの選択項目が変更された際に、変更前のものと変更後のものが続けざまに呼ばれる
単語補完リストの項目内容が変更される際、続けざまに呼ばれる。
秀丸上で、キーボードが押される度に呼び出される呼ばれる。
今回のものはデバッグ領域に出すだけといった地味なものでしたが、
次節からいよいよウィンドウ描画へと入っていきます。
しかし、心配は要りません。
.NETをベースとした解説であるため、簡単でありプログラム経験が浅い人でも理解しやすい、記述しやすいものとなっています。