前回までの話。
ログイン画面作成
今回はログイン画面作成から。
リソースビューからDialogフォルダまで開き、
リソースの追加を選択。

Dialogを新規作成します。
ダイアログIDは、プロパティからIDD_DIALOG_LOGINに変更しておきます。

ログイン画面で必要なコントロールは、
スタティックテキスト2つとエディットボックス2つです。
早速配置。

ここからエディットボックスは、プロパティで少し設定変更。
IDエディットボックス
IDは5桁の数字にしますので、「数字」をTrue。
また、エディットボックスの大きさ上絶対5桁以上は入りますので、
エディットボックスにフル入力するとそれ以上入力させないようにします。
「自動HScroll」をFalseに。

昔業務(障害対応)であったのですが、Trueだと多分3万字入るんですよね。
2^15か、2^15-1か。
テストやった人、何をもって3万字も入れようと思ったのか…。
パスワードエディットボックス
こちらは、「パスワード」をTrueに設定しておきます。

これでこのエディットボックスは、入力されても文字は●になります。

自動HScrollはTrueのままでいいでしょう。
寧ろ長い方がセキュリティ上よろしいので。
レイアウトはこんなもんです。
最後にID名と各コントロールの位置や大きさをrcファイルから。
IDD_DIALOG_LOGIN DIALOGEX 0, 0, 170, 130
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,20,100,50,14
PUSHBUTTON "キャンセル",IDCANCEL,100,100,50,14
LTEXT "ログインID",IDC_STATIC_LOGIN_ID,20,20,90,15
EDITTEXT IDC_EDIT_LOGIN_ID,20,35,90,15,ES_NUMBER
LTEXT "ログインパスワード",IDC_STATIC_LOGIN_PASSWORD,20,60,90,15
EDITTEXT IDC_EDIT_LOGIN_PASSWORD,20,75,90,15,ES_PASSWORD | ES_AUTOHSCROLL
ENDログインクラス作成
ダイアログから、とりあえずOKボタンをダブルクリック。
MFCクラス追加画面が出てきます。
今回のクラス名やcppファイルは以下の通りにします。

OKを押すと各種追加されます。

処理を作り始める前に、OnInitDialogを追加しておきます。
メニューから表示→クラスビュー、もしくはCtrl + Shift + C。
クラスビューが出てきますので、CLoginを選択。

そのままプロパティからオーバーライドを選択し、
OnInitDialogのプルダウンを選択。
Addします。

すると自動的にLogin.hとLogin.cppの方にOnInitDialogが作成されます。
ログイン画面 各種処理
通常、exeを起動すると一番最初にメイン画面が出てきますが。
今回は一番最初はログイン画面を出現させます。
その後、ログイン成功でメイン画面へ。
キャンセルだとexe自体を終了させます。
OnInitDialog
実は作る処理は特にありません。
ウィンドウのタイトルバーを作るくらいです。
SetWindowTextでタイトル作成します。
BOOL CLogin::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: ここに初期化を追加してください
SetWindowText(_T("ログイン画面"));
return TRUE; // return TRUE unless you set the focus to a control
// 例外 : OCX プロパティ ページは必ず FALSE を返します。
}メンバ変数追加
Login.hにメンバ変数を定義しておきます。
private:
CString m_strLoginID; // ログインID
CString m_strLoginPassword; // ログインパスワードメンバ変数作ったので、Login.cppのコンストラクタで忘れず初期化。
CLogin::CLogin(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_LOGIN, pParent)
{
// メンバ変数初期化
m_strLoginID = _T("");
m_strLoginPassword = _T("");
}続いてLogin.cppのDoDataExchengeに処理を追加。
void CLogin::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_LOGIN_ID, m_strLoginID); // ログインID
DDV_MaxChars(pDX, m_strLoginID, 5); // IDは5桁制御
DDX_Text(pDX, IDC_EDIT_LOGIN_PASSWORD, m_strLoginPassword); // ログインパスワード
}パスワードの方には5桁の制御をかけます。
これで、UpdateData(TRUE)が走った時、
メンバ変数2つにエディットボックスの文字列が格納されます。
OKボタン押下時
ここは次回詳細処理を追加させます。
とりあえず、ダイアログ画面からOKボタンをダブルクリックし、
OKボタンが押下された際の関数を自動追加させます。
OKボタン押下で、先ほどのメンバ変数を更新するためUpdateData(TRUE)を入れます。
/**
* @fn
* @brief OKボタン押下時の処理
* @param なし
* @return なし
*/
void CLogin::OnBnClickedOk()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
UpdateData(TRUE);
CDialogEx::OnOK();
}今回はこれだけです。
キャンセルボタン押下時
同じくダイアログ画面からキャンセルをダブルクリックし、
キャンセルボタンが押下されたときの処理を自動追加します。
キャンセルの場合はメイン画面に到達させずexe自体を終わらせます。
一応、メインのソースでも処理は書くのですが、
念のためこちらでも終了させる処理を追加します。
/**
* @fn
* @brief キャンセルボタン押下時の処理
* @param なし
* @return なし
*/
void CLogin::OnBnClickedCancel()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
CDialogEx::OnCancel();
PostQuitMessage(0); // アプリケーション終了
}ログイン画面呼応
今回の最後に、ログイン画面を実際に表示させます。
何も処理は書いていないので、
OKを押すとメイン画面へ、キャンセルを押すとそのまま終了にさせます。
SupplyRequestManager.cppを開きます。
まずはログインヘッダーをインクルードさせます。
#include "Login.h"続いて一番最初の処理、InitInstance内を見ると、
メインダイアログを呼び出すための処理が始まる箇所があります。
コンストラクタを作っているところですね。
CSupplyRequestManagerDlg dlg;その直前に、ログインダイアログを表示させる処理を作ります。
CLogin dlgLogin;
if (dlgLogin.DoModal() != IDOK)
{
// キャンセルが押された場合、アプリケーションを終了
return FALSE;
}
//メイン画面表示
CSupplyRequestManagerDlg dlg;さて、ビルドします。
exeを開くと

ログイン画面が出てきてくれました。
キャンセルを押すと、そのまま終了しました。
OKを押すと、

メイン画面の登場です。
因みにログイン画面で文字を入力すると

ログインIDは5桁しか入力できず、
パスワードは●になりました。
終わりに
今回はログイン画面の作成でした。
次回はスキーマとテーブルの作成の方ですかね。
プログラムはあまり書かないかもしれません。
今回はここまで。

コメント