今日またちょっと修正しましたが、基本型が完成したのでまたリソースからECCSkeltonによる、RTWEditorのプログラミングを解説します。
ワイド文字(UTF-16)を基本とするECCSkeltonのプログラミングは、基本的にShift-JISベースのBCCSkeltonのそれと変わりなく、同じツールを使用し、後にコードを修正してゆきます。
今回のRTWEditorは、既に公開しているBCCSkeltonのMDIベース(CMDI)のリッチテキストエディターを踏襲した、タブ(CTAB)ベースのリッチテキストエディターです。使用するECCSkeltonのクラスは以下の通りです。
(1)CSDI-メインウィンドウでメインメニュー、アイコンを備えます。
(2)CTBAR-そのツールバーです。
(3)CSBAR-そのステータスバーです。
(4)CTAB-メインウィンドウのクライアントエリアに張り付けてその管理を行います。
(5)CREDIT-リッチエディットコントロールを夫々のタブページに張り付けるのでその管理用に使います。
(6)CDLG-バージョンダイアログ用です。
(7)CMNDLG-「ファイルを開く」、「名前を付けて保存」のコモンダイアログダイアログを使います。
(8)CARG-ファイルドロップによる起動の際に利用します。
(9)CSTR-文字列処理で使います。
やはりリソースからプログラミングするので、BCCSkeltonのRTEditorのリソースを再利用していますが、任意のタブを閉じる処理があるので、
(1)MENUITEM L"ファイルを閉じる(&D)", IDM_DELETE
(2)ツールバービットマップに↑の為の「✖印」を追加しています。(注)
注:RTEditorでは標準ツールバービットマップとカスタムツールバービットマップを併用していますので、RTWEditorも同様に併用しています。
では、以下にRTWEditor.rcファイルを載せます。(ResRTWEditor.hは#defineでの値設定だけなので、省略します。)
【RTWEditor.rc】
//-----------------------------------------
// BCCForm Ver 2.4
// An Easy Resource Editor for BCC
// Copyright (c) February 2002 by ysama
//-----------------------------------------
#include "ResRTWEditor.h" //(解説:IDの値を#defineで設定するヘッダーファイル(省略))
//----------------------------------
// ダイアログ (IDD_VERSION)
//----------------------------------
IDD_VERSION DIALOG DISCARDABLE 0, 0, 160, 40
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION L"バージョン情報"
FONT 9, L"Times New Roman"
{
CONTROL IDI_ICON, 0, L"STATIC", WS_CHILD | WS_VISIBLE | SS_ICON, 8, 8, 32, 32
CONTROL L"RTWEditor Verson 1.0\nCopyright 2022 By Ysama", IDC_VERTXT, L"STATIC", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 32, 8, 80, 24
CONTROL L"OK", IDOK, L"BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 10, 20, 13
}
//(解説:これはRTEditorと変わりありません。)
//-------------------------
// メニュー(MAIN_MENU)
//-------------------------
MAIN_MENU MENU DISCARDABLE
{
POPUP L"ファイル(&F)"
{
MENUITEM L"新規作成(&N)", IDM_NEW
MENUITEM L"ファイルを開く(&O)", IDM_OPEN
MENUITEM L"上書き保存(&S)", IDM_SAVE, GRAYED
MENUITEM L"名前をつけて保存(&A)", IDM_SAVEAS, GRAYED
MENUITEM SEPARATOR
MENUITEM L"プリンター設定(&T)", IDM_SETPRINT
MENUITEM L"印刷(&P)", IDM_PRINT, GRAYED
MENUITEM SEPARATOR
MENUITEM L"終了(&X)", IDM_EXIT
}
POPUP L"編集(&E)", GRAYED
{
MENUITEM L"元に戻す(&U)", IDM_UNDO
MENUITEM SEPARATOR
MENUITEM L"切り取り(&T)", IDM_CUT
MENUITEM L"コピー(&C)", IDM_COPY
MENUITEM L"貼り付け(&P)", IDM_PASTE
MENUITEM SEPARATOR
MENUITEM L"すべて選択(&A)", IDM_SELALL
MENUITEM SEPARATOR
MENUITEM L"文字列の検索(&F)", IDM_FIND
MENUITEM L"文字列の置換(&R)", IDM_REPLACE
MENUITEM SEPARATOR
MENUITEM L"ファイルを閉じる(&D)", IDM_DELETE
//(解説:これだけ追加しました。)
}
POPUP L"書式(&F)", GRAYED
{
MENUITEM L"フォント設定(&F)", IDM_FONT
POPUP L"文字寄せ(&A)"
{
MENUITEM L"左寄せ(&L)", IDM_LEFT
MENUITEM L"センタリング(&C)", IDM_CENTER
MENUITEM L"右寄せ(&R)", IDM_RIGHT
}
POPUP L"インデント(&I)"
{
MENUITEM L"左インデント(&I)", IDM_LINDENT
MENUITEM L"左インデント解除(&O)", IDM_LOUTDENT
MENUITEM L"右インデント(&I)", IDM_RINDENT
MENUITEM L"右インデント解除(&O)", IDM_ROUTDENT
}
}
//(解説:逆にMDIベースのプログラムでは標準で付ける↓は削除しています。
/*
POPUP "ウィンドウ(&W)", GRAYED
{
MENUITEM "重ねて並べる(&C)", IDM_CASCADE
MENUITEM "縦に並べる(&V)", IDM_TILEHORZ
MENUITEM "横に並べる(&H)", IDM_TILEVERT
MENUITEM "アイコンの整列(&I)", IDM_ARRANGE
}
*/
POPUP L"ヘルプ(&H)"
{
MENUITEM L"簡単な説明(&B)", IDM_BRIEF
MENUITEM L"ショートカットキー(&S)", IDM_SHORTCUT
MENUITEM L"バージョン(&V)", IDM_VER
}
}
//--------------------------
// イメージ(IDI_CUSTOM)
//--------------------------
IDI_CUSTOM BITMAP DISCARDABLE "Custom.bmp"
//(解説:ツールバーのカスタムビットマップです。L""にしないので注意!)
//--------------------------
// イメージ(IDI_DOC)
//--------------------------
IDI_DOC BITMAP DISCARDABLE "Doc.bmp"
//(解説:タブのタグに表示する「文書」を表すビットマップです。L""にしないので注意!)
//--------------------------
// イメージ(IDI_ICON)
//--------------------------
IDI_ICON ICON DISCARDABLE "Icon.ico"
//(解説:システムアイコンです。L""にしないので注意!)
//--------------------------------
// アクセラレーター (IDA_ACCEL)
//--------------------------------
IDA_ACCEL ACCELERATORS DISCARDABLE
{
VK_C, IDM_COPY, VIRTKEY, CONTROL, NOINVERT
VK_F, IDM_FIND, VIRTKEY, CONTROL, NOINVERT
VK_N, IDM_NEW, VIRTKEY, CONTROL, NOINVERT
VK_O, IDM_OPEN, VIRTKEY, CONTROL, NOINVERT
VK_P, IDM_PRINT, VIRTKEY, CONTROL, NOINVERT
VK_R, IDM_REPLACE, VIRTKEY, CONTROL, NOINVERT
VK_S, IDM_SAVE, VIRTKEY, CONTROL, NOINVERT
VK_T, IDM_CUT, VIRTKEY, CONTROL, NOINVERT
VK_V, IDM_PASTE, VIRTKEY, CONTROL, NOINVERT
VK_X, IDM_EXIT, VIRTKEY, CONTROL, NOINVERT
VK_U, IDM_UNDO, VIRTKEY, CONTROL, NOINVERT
VK_F1, IDM_SHORTCUT, VIRTKEY, NOINVERT
VK_F2, IDM_VER, VIRTKEY, NOINVERT
}
//(解説:珍しくこのプログラムではBCCFormでアクセラレーターを追加しています。)
//--------------------
// ストリングテーブル
//--------------------
STRINGTABLE DISCARDABLE
{
String_00, L"新規作成"
String_01, L"ファイルを開く"
String_02, L"上書き保存"
String_03, L"プリンター設定"
String_04, L"印刷"
String_05, L"元に戻す"
String_06, L"切り取り"
String_07, L"コピー"
String_08, L"貼り付け"
String_09, L"文字列の検索"
String_10, L"文字列の置換"
String_11, L"ファイルを閉じる"
String_12, L"左寄せ"
String_13, L"センタリング"
String_14, L"右寄せ"
String_15, L"フォント設定"
String_16, L"左インデント"
String_17, L"左インデント解除"
String_18, L"右インデント"
String_19, L"右インデント解除"
}
//(解説:また、ツールバーボタンのツールチップ用にBCCFormでつくったストリングテーブルを使っています。)
BCCSkeltonからECCSkeltonへの移植での注意としては、ANSI文字列(char)がワイド文字列(WCHAR)になるので、文字定数は"(文字列)"ではなく、L"(文字列)"と表記することが必要です。(しかしイメージリソースのファイル指定では、"(ファイルパス、名)"のままでないと正しくコンパイルされないので、注意が必要です。)
では、次回はRTWEditor.cppとRTWEditor.hファイルを解説します。