バグフィクスも完了したので、Dump改良を進めます。今回は定義関係を扱うDump.hです。いつものように(解説:)を付けて改良後のソースを示します。

 

//////////////////////////////////////////
// Dump.h
// Copyright (c) 03/04/2021 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー-これに必要なヘッダーが入っている
#include    "BCCSkelton.h"
//リソースIDのヘッダー
#include    "ResDump.h"
//1行16バイト表示に4('XXXX')+ 1(' ')+ 24('XX ')+ 1(':')+ 24('XX '+ 1(':')+ 16 = 71バイト必要
//エディットボックスの最大値
#define        EDITMAX    32767
//エディットボックスの最大文字数初期値は 32767バイト
//出力一行は4(アドレス)+ 1(スペース)+ 24(数字X2+スペース)+ 1(区切り:)
//+ 24(数字X2+スペース)+ 1(区切り:)+ 16(文字表示)+'CRLF'2 = 73バイトで
//448行迄出力可となることから、7,168バイトを読み出し単位とする。
#define        PAGE    7168
//(解説:)実は定数EDITMAXは改良では使っていません。もともとDumpProc.hにあった「1回の表示最大値」定義を引っ越し、残ったものです。削除していただいて構いません。逆に今回は「1回の表示値=PAGE」という概念とし、定義しています。コメントは何故7168バイトなのか、の説明です。

 

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCDLGクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CDLG
{
public:    //以下はコールバック関数マクロと関連している
    //2重起動防止用のMutex用ID名称
    CMyWnd(char* UName) : CDLG(UName) {}
    //メンバー変数
    char* m_FileName;            //ファイル名(解説:もともとはグローバル変数)
    CFILE m_File;                //ファイルクラス変数(解説:もともとはOnFile()関数のローカル変数)
    CSTR m_Buff;                //エディットコントロール用文字列バッファ(解説:もともとはOnFile()関数のローカル変数)
    int m_LastPage;                //最大ページ数(解説:新設-最終ページを記録する)
    int m_Page;                    //表示ページ数(解説:新設-現在の表示ページを記録する)
//(解説:1回にすべて表示して終わる以前のDumpと異なり、いつもフィル内容を保持しておき、どの部分も選択して表示できるようにファイルデータ、最大ページ数と現在のページ数をメンバー変数として記録しておくようにしました。)
   

 

 //メニュー項目、ダイアログコントロール関連
    bool OnFile();
    bool OnTop();    //(解説:新設-先頭のページへ移動) 
    bool OnBefore();    //(解説:新設-ひとつ前のページへ移動)
    bool OnNext();    //(解説:新設-ひとつ後ののページへ移動)
    bool OnBottom();    //(解説:新設-後尾のページへ移動)
    bool OnIdok();
    //ウィンドウメッセージ関連
    bool OnInit(WPARAM, LPARAM);
    bool OnSize(WPARAM, LPARAM);
    bool OnClose(WPARAM, LPARAM);
    bool OnDestroy(WPARAM, LPARAM);
    bool OnDropFiles(WPARAM, LPARAM);
    //ユーザー定義関数
    bool SetPage(int);    //(解説:新設-ページ数をISC_PAGEエディットボックスに表示)
    bool ShowData(int);    //(解説:新設-ファイルデータを16進数表示でIDC_EDITエディットウィンドウに表示)
    bool ChangeTopStatus(bool);    //(解説:新設-先頭に戻るボタンやひとつ前に戻るボタンの状態を変更する)
    bool ChangeBottomStatus(bool);    //(解説:新設-後尾に戻るボタンやひとつ後に戻るボタンの状態を変更する)
    bool GoMiddle(WPARAM);    //(解説:新設-ページエディットボックスをクリックすると中央のページに移動する)
};
//(解説:今回の改良の目玉であるページ移動処理の為に新設したコントロールの処理を追加しています。)
 

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

BEGIN_MODELESSDLGMSG(ModelessProc, Dump)    //コールバック関数名は主ウィンドウの場合ModelessProcにしている
    //メニュー項目、ダイアログコントロール関連
    ON_COMMAND(Dump, IDC_FILE, OnFile())
    ON_COMMAND(Dump, IDC_TOP, OnTop())    //(解説:新設)
    ON_COMMAND(Dump, IDC_BEFORE, OnBefore())    //(解説:新設)
    ON_COMMAND(Dump, IDC_NEXT, OnNext())    //(解説:新設)
    ON_COMMAND(Dump, IDC_BOTTOM, OnBottom())    //(解説:新設)
    ON_COMMAND(Dump, IDOK, OnIdok())
    //ウィンドウメッセージ関連
    //自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
    ON_SIZE(Dump)
    ON_COMMAND(Dump, IDC_PAGE, GoMiddle(wParam))
    ON_DESTROY(Dump)
    ON_(Dump, WM_DROPFILES, OnDropFiles(wParam, lParam))
END_DLGMSG

///////////////////////
//ステータスバーの作成
///////////////////////
CSBAR SBar;

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

////////////////////////
//CARGインスタンスの作成
////////////////////////
CARG arg;

////////////////
//グローバル変数
////////////////
//システム関連
bool g_ByFile = FALSE;    //ファイルドロップによる起動フラグ    //(解説:これもメンバー変数にしてもよいのですが、外部変数のまま残しました。)