簡易テキストエディタ(1)

今回は、メモ帳相当のテキストエディタを作成します。 といっても難しいことはなく、エディットコントロールの編集機能を使うだけです。

メモ帳を使っていて、私が不満に感じる点がいくつかあります。

エディットコントロールを使う以上、根本的には解決できない問題点もありますが、 どうせならこれらを解決/改善したバージョンを作成したいと思います。

なお、印刷機能はサポートしません。これは私が、パソコンは毎日使うくせに、 プリンタは年に一回も使わないという人間だからです。

ダイアログのデザイン

まず、以下のようなダイアログを作ります。
editdlg DIALOG 6, 18, 200, 120
STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "簡易テキストエディタ"
FONT 12, "System"
MENU editmenu
BEGIN
	EDITTEXT  IDEDIT, 4, 15, 150, 79, ES_MULTILINE | WS_VSCROLL | ES_WANTRETURN | ES_NOHIDESEL
END
ご覧のとおり、エディットコントロールが一個あるだけのダイアログです。 「読み込み」とかのボタンはつけないの? まあ待ってください。 「MENU editmenu」という指定がありますね。これはダイアログにメニューをつけるという指定です。 リソースファイルに、以下のようなメニューテンプレートを作成します。
editmenu MENU
BEGIN
	POPUP        "ファイル(\036F\037フ)"
	BEGIN
		MENUITEM "新規作成(\036N\037シ)", IDM_NEW
		MENUITEM "開く(\036O\037ヒ)...", IDM_OPEN
		MENUITEM "上書き保存(\036S\037セ)", IDM_SAVE
		MENUITEM "名前をつけて保存(\036A\037ナ)...", IDM_NAME
		MENUITEM SEPARATOR
		MENUITEM "終了(\036X\037シ)",    IDM_EXIT
	END

	POPUP        "ヘルプ(\036H\037ヘ)"
	BEGIN
		MENUITEM "ヘルプの表示(\036H\037ヘ)...", IDM_HELP
		MENUITEM "バージョン情報(\036A\037シ)...", IDM_ABOUT
	END
END
これで、適当なWinMainとダイアログプロシージャがあれば、 以下のようなダイアログを表示できるはずです。

なお、今回は 前回で予言したように、モードレスダイアログを使います。 また、エディタとしてまともに使用するためには、TABキーでTAB文字が入力できないと困るので、 IsDialogMessage()は呼び出しません。

WM_INITDIALOGとWM_SIZEに応答して

	GetClientRect (hDlg, &rc);
	MoveWindow(GetDlgItem(hDlg, IDEDIT) , 0, 0, rc.right, rc.bottom, TRUE);
という処理を実行していますが、これはエディットコントロールのサイズを ダイアログのサイズに合わせています。

未サボートのコマンドを

	case IDM_HELP:
		MessageBox(hDlg, "未サポート","簡易テキストエディタ", MB_OK);
		break;
などどしていますが、これを
	default:
		MessageBox(hDlg, "未サポート","簡易テキストエディタ", MB_OK);
		break;
にしてはいけません。ひどい目にあうこと、うけあいです。

ファイル読み込みと保存

読み込みはreadtext()関数、保存はwritetext()関数でやっています。 普通のファイル操作とメモリ操作ですね。特別なことはやっていません。 マルチラインのエディットコントロールの場合、SetDlgItemText()やGetDlgItemText() ではテキスト全体の設定/取得になります。

なお、SetWindowText(hDlg, "簡易テキストエディタ:無題");これはダイアログ自体のタイトルバー に表示する文字列の設定です。

これでエディタとしての最低限の恰好は整いました。

全ソース

前のページ

次のページ

一つ上のページに戻る