ObjeqtNote #11 メインウィンドウとメインアプリケーションの定義

こちらもメインウィンドウとメインアプリケーションを導入・・・。
Aoiと同様にMainWindow.h、MainWindow.cpp、MainApplication.h、MainApplication.cppを追加し、同じように修正・・・。

MainWindow.cppでは、

カスタムコントロールに加えて、ユーザコントロールの処理も書く・・・。

MainApplication.cppでは、

ユーザコントロールのウィンドウクラスの登録を忘れずに・・・。

WinMain.cppでは、

CMainApplicationに差し替え・・・。

f:id:BG1:20170127170554p:plain

表面上は変わらず・・・。

・メインウィンドウとメインアプリケーションの定義 · bg1bgst333/ObjeqtNote@7607003 · GitHub

Aoi #10 メインウィンドウとメインアプリケーションの定義

そろそろ、ちゃんとメインウィンドウとメインアプリケーションを定義しようと思う・・・。

MainApplication.hを追加して、

Aoiでは、CStandardApplicationをベースにCMainApplicationを定義・・・。
コンストラクタとInitInstanceをオーバーライド・・・。

MainApplication.cppでは、

InitInstanceでは、CStandardApplication::InitInstance、CMainWindow::RegisterClass、そしてCMainWindowの生成と表示・・・。

MainWindow.hは、

CMainWindowは、CStandardWindowベース・・・。
m_pCustomControlを持ち、RegisterClass、コンストラクタ、デストラクタ、Create、OnCreateをオーバーライド・・・。

MainWindow.cppでは、

ウィンドウクラスを"MainWindow"として、登録や生成をしている・・・。
また、OnCreateでm_pMenuBarとm_pCustomControlの生成・表示をしている・・・。
コンストラクタ・デストラクタはm_pCustomControlだけでいい・・・。
OnCreateは、オーバーライドなので、基底クラスメンバのm_pMenuBarもやる必要あり・・・。

StandardApplication.cppでは、

ウィンドウの生成・表示はもうやらなくていい・・・。

StandardWindow.hでは、

m_pCustomControlがなくなり、StandardWindow.cppからも、

コンストラクタ、デストラクタ、そしてOnCreateのカスタムコントロールの作成はなくなった・・・。
ただ、メニューバーの作成はオーバーライドなので残してもいい・・・。

最後にWinMain.cppは、

CMainApplicationに差し替える・・・。

f:id:BG1:20170127034434p:plain

まあ、表面上は変わらない・・・。

・メインウィンドウとメインアプリケーションの定義 · bg1bgst333/Aoi@ecd3f59 · GitHub

Aoi #9 カスタムコントロールの定義

Aoiにもカスタムコントロールは導入する・・・。(ユーザコントロールはないけど・・・。)

CustomControl.h、CustomControl.cppを追加したら、

StandardWindow.hは、CCustomControlオブジェクトポインタのm_pCustomControlだけ・・・。

カスタムコントロールだけ作成・・・。
カスタムコントロールだけになったので、またちょっと位置をいじってる・・・。

f:id:BG1:20170126165430p:plain

カスタムコントロールだけ表示・・・。

・カスタムコントロールの定義 · bg1bgst333/Aoi@3e23391 · GitHub

VizCommand #6 カスタムコントロールの定義

こちらもウィンドウクラス"EDIT"ベースなカスタムコントロールを追加する・・・。

CustomControl.h、CustomControl.cppを追加・・・。
この2つはいじる必要なし・・・。

BasicWindow.hには、

CCustomControlオブジェクトポインタm_pCustomControlを追加・・・。

コンストラクタで初期化、デストラクタで解放処理・・・。
そして、OnCreateでカスタムコントロールの作成・・・。
Create時に、ユーザコントロールと重ならないように、ObjeqtNoteとはちょっと位置座標を変えている・・・。

f:id:BG1:20170126152650p:plain

こんな風に入力できる・・・。

・カスタムコントロールの定義 · bg1bgst333/VizCommand@768958e · GitHub

ObjeqtNote #10 カスタムコントロールの定義

ユーザコントロールは独自のウィンドウクラスなのに対し、カスタムコントロールは既存のウィンドウクラスをベースにウィンドウプロシージャを差し替えて作る・・・。

f:id:BG1:20170125224517p:plain

CustomControl.hでは、

CWindowの派生クラスCCustomControlを定義・・・。
既定のウィンドウクラス名から既定のウィンドウプロシージャを引くm_mapBaseWindowProcMapを用意・・・。
独自にStaticWindowProcを持つ・・・。
コンストラクタ、Create、そしてDynamicWindowProcも・・・。

CustomControl.cppは、

Createでは、CreateWindowでウィンドウを作成・・・。
そのあと、OnCreateを呼ぶ・・・。
このウィンドウのプロシージャをGetWindowLongで取得、一旦lpfnWndProcに格納・・・。
SetWindowLongで、このクラスのStaticWindowProcを新しいプロシージャとしてセット・・・。
CCustomControl::m_mapBaseWindowProcMapにベースとなるウィンドウクラス名とlpfnWndProcのペアをセット・・・。
ウィンドウマップ登録もそのあとしておく・・・。

StaticWindowProcでは、pWindowがあった場合はpWindow->DynamicWindowProc、無かった場合でGetClassNameで取得したhwndのウィンドウクラス名がm_mapBaseWindowProcMapにあった場合はCallWindowProcでそのプロシージャに任せる・・・。無かったらDefWindowProc・・・。

DynamicWindowProcでは、各ウィンドウメッセージごとの処理・・・。
最後にウィンドウクラス名がm_mapBaseWindowProcMapにあった場合はまたCallWindowProc、なかった場合はDefWindowProc・・・。

StandardWindow.hでは、

m_pCustomControlを追加・・・。

StandardWindow.cppでは、

m_pCustomControlの初期化処理と解放処理を追加、そしてOnCreateでウィンドウクラス名"Edit"なカスタムコントロールを作成・・・。

f:id:BG1:20170125233459p:plain

ユーザコントロールの右下にエディットコントロールベースなカスタムコントロール・・・。

f:id:BG1:20170125233553p:plain

エディットコントロールの機能を持っているので文字列を入力できる・・・。

・カスタムコントロールの定義 · bg1bgst333/ObjeqtNote@deab613 · GitHub

VizCommand #5 ユーザコントロールの定義

VizCommandにもユーザコントロールを配置する・・・。
そして、AoiやObjeqtNoteで進めていた部分を一部(メニュー周りは要らないので除く)反映する・・・。

まず、UserControl.hを追加・・・。

ここは変わらず・・・。

UserControl.cppも、

ここも変わらない・・・。

続いて、StandardApplication.hを追加・・・。

で、StandardApplication.cppは、

AoiやObjeqtNoteでは、m_pMainWindowにはCStandardWindowオブジェクトポインタを入れていたが、メニューは要らないのでCBasicWindowに変更・・・。

WinMain.cppは、

CStandardApplicationに変更・・・。

Window.hとWindow.cppでは、メニュー対応のRegisterClassとOnCommandのところを反映しただけ・・・。ここじゃ使わないね・・・。

BasicWindow.hは、

m_pUserControl、デストラクタ、OnCreateの追加・・・。
BasicWindow.cppは、

それの対応・・・。OnCreateでUserControlをつくってる・・・。
BasicApplication.cppで、

InitInstanceをCBasicWindowのRegisterClassだけに・・・。

f:id:BG1:20170125114700p:plain

これでメニュー無しのVizCommandでもユーザコントロールを表示できた・・・。

・ユーザコントロールの定義 · bg1bgst333/VizCommand@0950230 · GitHub

ObjeqtNote #9 ユーザコントロールの定義

いずれかのウィンドウを親に持ち、独自のウィンドウクラスから作られた子ウィンドウを、ここでは独自に"ユーザコントロール"とする・・・。(一般的なユーザコントロールと意味は違うかもしれないけど・・・。)

f:id:BG1:20170124220107p:plain

UserControl.hで、

CWindow派生のCUserControlは、RegisterClassにもCreateにも、ウィンドウクラス名を指定する部分がある・・・。

CWindow::RegisterClassで独自のウィンドウクラスを登録し、CWindow::Createで独自のウィンドウクラスのウィンドウを作るので、ウィンドウクラス名を指定できるようになっていないといけない・・・。
また、dwStyleに加えて、WS_CHILD、WS_VISIBLEを付けている・・・。

StandardWindow.hに、

CUserControlのポインタm_pUserControl、それとコンストラクタに加えてデストラクタも用意・・・。

コンストラクタにメンバの初期化処理、デストラクタにメンバの終了(解放)処理を追加・・・。

OnCreateで、CUserControlオブジェクトの作成とCreate・・・。

f:id:BG1:20170124222026p:plain

WS_BORDERつけてるので、この矩形がユーザコントロール・・・。

・ユーザコントロールの定義 · bg1bgst333/ObjeqtNote@9cee45b · GitHub