最終更新日 2024-09-25

チュートリアル① ~「HmAutoCompleteEx.dll」利用方法 開発準備編~

概要

この章より、いくつかのステップに分けて、「HmAutoCompleteEx.dll」の利用方法を解説してゆきます。

チュートリアルが目指すもの

チュートリアルの最終目標は「プログラミング言語 Perl」用の入力補完拡張用の.dllを作成することになります。
(Perlの話題自体は登場しません。)
話がブレないよう、チュートリアルの目標を統一し、理解を促進するためとなります。

Perl言語の設定

秀丸の「ファイルタイプ別の設定」を利用して、「.pl」という拡張子に対して、
下画像のような設定を施しておきましょう。
これから行っていくチュートリアルの動作確認の上で、

(大切なことは「入力補完のウィンドウ」を出しやすくして確認しやすくすること、
「入力補完ウィンドウ」中に上下等で選択出来るタイプの「リスト」であることです。)

SDKのダウンロード

更新日 2017/12/13
HmAutoCompleteExPlug.zip ver 0.802

上記ファイルに含まれるプロジェクトを利用していくことで、「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にするということ)

「HmAutoCompleteEx.dll」と「HmAutoCompleteExPlug.dll」を秀丸ディレクトリにコピー

コンパイルすることで、「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をベースとした解説であるため、簡単でありプログラム経験が浅い人でも理解しやすい、記述しやすいものとなっています。