バグフィクスも完了したので、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; //ファイルドロップによる起動フラグ //(解説:これもメンバー変数にしてもよいのですが、外部変数のまま残しました。)