メインダイアログ一個のシンプルなソフトなのでサクッといきますか?

 

【BCC2ECC.rc】

//-----------------------------------------
//             BCCForm Ver 2.41
//    An Easy Resource Editor for BCC
//  Copyright (c) February 2002 by ysama
//-----------------------------------------
#include    "ResBCC2ECC.h"

//----------------------------------
// ダイアログ (IDD_MAIN)
//----------------------------------
IDD_MAIN DIALOG DISCARDABLE 0, 0, 270, 91
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_DLGFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT | DS_CENTER
CAPTION "BCC2ECC"
FONT 8, "MS 明朝"
{
 CONTROL "選択", IDC_SEL, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 237, 3, 27, 15
 CONTROL "特定関数も対象にする", IDC_OPTION, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 75, 69, 120, 15
 CONTROL "変換", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 213, 69, 45, 15
 CONTROL "終了", IDNO, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 9, 69, 45, 15
 CONTROL "プロジェクト名", 0, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_LEFT, 3, 6, 63, 12
 CONTROL "", IDC_EDIT, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | ES_READONLY | ES_LEFT, 69, 3, 159, 15, WS_EX_CLIENTEDGE
 CONTROL "", IDC_LISTBOX, "LISTBOX", WS_CHILD | WS_VISIBLE | WS_VSCROLL, 6, 27, 258, 54, WS_EX_CLIENTEDGE
}

//--------------------------
// イメージ(IDI_ICON)
//--------------------------
IDI_ICON    ICON    DISCARDABLE    "Icon.ico"
 

SkelonWizardが排出するbdpファイルを選択するためのEDITコントロールとボタン、現在度のファイルを処理しているのかを示すリストボックス、特定関数の変換処理を行うか否かを決定するチェックボックスと最後に変換処理を行うボタンと終了ボタンだけのダイアログです。

 

【BCC2ECC.cpp】

////////////////////////////////////////////////////
// BCC2ECC.cpp
// このソフトはbcc32(bcc55)でコンパイル
// できますが、正常に動作しない可能性があります。
// bcc32c(bcc102)を使ってください。
// 詳しくは↓
//https://ameblo.jp/ysama2021/entry-12763568154.html
//Copyright (c) 09/06/2022 by BCCSkelton
////////////////////////////////////////////////////
#include    "BCC2ECC.h"
#include    "BCC2ECCProc.h"

////////////////
// WinMain関数
////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow) {

    //2重起動防止
    if(!BCC2ECC.IsOnlyOne()) {
        HWND hWnd = FindWindow("MainWnd", "BCC2ECC");
        if(IsIconic(hWnd))
            ShowWindow(hWnd, SW_RESTORE);
        SetForegroundWindow(hWnd);
        return 0L;
    }

    //モードレスダイアログを作成Create(hParent, DlgName, DlgProc);
    if(!BCC2ECC.Create(NULL, hInstance, "IDD_MAIN", ModelessProc))
        return 0L;

    //メッセージループに入る
    return BCC2ECC.Loop();
}
 

SkeltonWizardの排出したコード通りのファイルです。なお、前回書いた

【旧bcc32の謎】誰か分かる人はいますか?

があるので、コメントで明記しておきました。

 

【BCC2ECC.h】

//////////////////////////////////////////
// BCC2ECC.h
// Copyright (c) 09/06/2022 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー-これに必要なヘッダーが入っている
#include    "BCCSkelton.h"
//リソースIDのヘッダー
#include    "ResBCC2ECC.h"

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCDLGクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CDLG
{
    public:    //メンバー変数
    //ファイル関連外部変数
    char m_PathName[MAX_PATH];    //フルパスプロジェクトファイル名
    char* m_Ext;                //フルパスプロジェクトファイル名の'.'の位置
    char m_PrjtName[MAX_PATH];    //プロジェクト名のみ
    bool m_Option;

    public:    //以下はコールバック関数マクロと関連している
    //2重起動防止用のMutex用ID名称
    CMyWnd(char* UName) : CDLG(UName) {}
    //メニュー項目、ダイアログコントロール関連
    bool OnSel();
    bool OnIdno();
    bool OnIdok();
    //ウィンドウメッセージ関連
    bool OnClose(WPARAM, LPARAM);
    bool OnDestroy(WPARAM, LPARAM);
    //ユーザー定義関数
    void Init();
    bool ModifyRC();
    bool ModifyCPP();
    bool ModifyH();
    bool ModifyProcH();

};

////////////////////////////////////////////////////////////////////////
//派生させたCMyWndクラスのインスタンスとコールバック関数(マクロ)の作成
//主ウィンドウはダイアログと違い、コールバック関数は一つしか作れない
////////////////////////////////////////////////////////////////////////
CMyWnd BCC2ECC("BCC2ECC");    //ウィンドウクラスインスタンスの生成

BEGIN_MODELESSDLGMSG(ModelessProc, BCC2ECC)    //コールバック関数名は主ウィンドウの場合ModelessProcにしている
    //メニュー項目、ダイアログコントロール関連
    ON_COMMAND(BCC2ECC, IDC_SEL, OnSel())
    ON_COMMAND(BCC2ECC, IDOK, OnIdok())
    ON_COMMAND(BCC2ECC, IDNO, OnIdno())
    //ウィンドウメッセージ関連
    //自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
    ON_DESTROY(BCC2ECC)
END_DLGMSG

////////////////////////
//コモンダイアログの作成
////////////////////////
CMNDLG cmndlg;
 

これもほぼSkeltonWizardのコード通りです。bdpファイルを選択して開くのでCMNDLGクラスのインスタンスを追加しています。

独自コードはメンバー変数を4つ(↑赤字)と変数、ユーザー定義関数としてコントロールの初期化関数、4つのファイルの処理関数(↑赤字)をメンバー関数として追加しています。

 

これらの追加コードで何をしているのかは、Proc.hの解説で行います。