今日またちょっと修正しましたが、基本型が完成したのでまたリソースから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ファイルを解説します。