Aoi #4 基本となるアプリケーションとウィンドウ

基本的なアプリケーションに使うクラスをCBasicApplicationとし、CApplicationを継承元とする・・・。
また、基本的なウィンドウ(メニューは付かない)に使うクラスをCBasicWindowとし、CWindowを継承元とする・・・。

まず、Window.hに、

lpctszClassName省略版Createを追加・・・。

オーバーライドされず、基底のCWindowに来る場合は、ウィンドウクラス"Window"のウィンドウとして作成・・・。

Application.cppは、

InitInstanceでは、ウィンドウクラス登録だけになり、オブジェクト生成、ウィンドウ作成、ウィンドウ表示はカット・・・。

BasicWindow.hは、

引数にhInstanceだけを取るRegisterClass・・・。

CBasicWindowなら"BasicWindow"をウィンドウクラス名として登録する・・・。

あとはコンストラクタとウィンドウクラス名の省略されたCreate・・・。

BasicWindow.cppでは、

RegisterClassは"BasicWindow"で登録・・・。
コンストラクタではCWindowのコンストラクタだけ・・・。
Createに来たら、ウィンドウクラス"BasicWindow"のウィンドウとして作成・・・。

BasicApplication.hは、

コンストラクタとInitInstance・・・。

BasicApplication.cppは、

コンストラクタはCApplicationのものを呼んでるだけ・・・。
InitInstanceでは、CApplicationのInitInstanceを呼んでから、ウィンドウクラス登録、ウィンドウオブジェクト生成、ウィンドウ作成、ウィンドウ表示となっている・・・。

WinMain.cppは、

生成するアプリケーションオブジェクトがCBasicApplicationになっている・・・。
受け取る型はCApplication *でいいが・・・。

f:id:BG1:20170114041439p:plain

表示は変わらず・・・。

・基本となるアプリケーションとウィンドウ · bg1bgst333/Aoi@85e4e82 · GitHub

ObjeqtNote #3 ダイナミックウィンドウプロシージャ化

ObjeqtNoteもダイナミックウィンドウプロシージャに・・・。

Window.hは、

と、Aoiと同じ・・・。

Window.cppも、

StaticWindowProcなど、

だいたいAoiと同じ・・・。

f:id:BG1:20170113155536p:plain

表示も変わらない・・・。

・ダイナミックウィンドウプロシージャ化 · bg1bgst333/ObjeqtNote@29519bf · GitHub

Aoi #3 ダイナミックウィンドウプロシージャ化

まだ普通のウィンドウプロシージャでメッセージ処理していたので、ウィンドウオブジェクトごとに振り分けるダイナミックウィンドウプロシージャを導入・・・。

Window.hは、

ウィンドウハンドルをキーとし、CWindowオブジェクトポインタを値とするマップm_mapWindowMapを追加・・・。
DynamicWindowProc、それとウィンドウ作成時のOnCreate、ウィンドウ破棄時のOnDestroyも・・・。

Window.cppのStaticWindowProcは、

WM_CREATEで、lpCreateStruct->lpCreateParamsに、CreateWindowの最後の引数で渡したCWindowオブジェクトポインタが格納されているので、それを取り出す・・・。
で、m_mapWindowMapにウィンドウハンドルhwndとそのポインタpWindowのペアを登録・・・。
WM_CREATE以外の時は、逆にhwndを使ってpWindowを取得・・・。
NULLだったらDefWindowProc、そうでなければpWindow->DynamicWindowProcにプロシージャ処理を任せる・・・。

DynamicWindowProcは、

WM_CREATEはOnCreate、WM_DESTROYはOnDestroyに任せる・・・。

その2つのハンドラの中身は、

0を返したり、メッセージループを終了したりと、前回と同じ・・・。

f:id:BG1:20170113122533p:plain

外見は変わらない・・・。

・ダイナミックウィンドウプロシージャ化 · bg1bgst333/Aoi@214a09b · GitHub

VizCommand #2 ウィンドウクラス化 & アプリケーションクラス化

VizCommandもクラス化・・・。

WinMain.cppは、

Application.cppは、

で、それ以外は、Aoi、ObjeqtNoteと同じ・・・。

f:id:BG1:20170112225123p:plain

表示は変わらず・・・。

・ウィンドウクラス化 · bg1bgst333/VizCommand@97ce517 · GitHub

ObjeqtNote #2 ウィンドウクラス化 & アプリケーションクラス化

ObjeqtNoteもクラス化・・・。

といっても、Aoiとの違いは、WinMain.cppの、

と、Application.cppの、

ぐらい・・・。

f:id:BG1:20170112220531p:plain

ウィンドウの表示は変わらず・・・。

・ウィンドウクラス化 · bg1bgst333/ObjeqtNote@624a719 · GitHub

Aoi #2 ウィンドウクラス化 & アプリケーションクラス化

WinMain.cppだけのウィンドウ表示から、ウィンドウクラスとアプリケーションクラスによるウィンドウ表示に書き換える・・・。

まず、Window.hは、

今回、ウィンドウの位置とサイズのメンバを追加・・・。
あと、一応コンストラクタも追加・・・。
あとは、ウィンドウクラス登録、スタティックウィンドウプロシージャ、ウィンドウ作成、ウィンドウ表示・・・。

Window.cppは、

コンストラクタで初期化、デストラクタで場合によってはメモリとかウィンドウハンドルの解放とか・・・。

ウィンドウクラス登録・・・。

ウィンドウプロシージャStaticWindowProcでWM_CREATE、WM_DESTROYの処理をする・・・。

こんな風に位置とサイズをメンバにセットした上でCreateWindow・・・。

Application.hは、

こちらも一応、コンストラクタとデストラクタを追加・・・。

Application.cppは、

デストラクタは一応、解放処理も入れている・・・。

InitInstanceでは、CWindow::RegisterClassで独自のウィンドウクラス"Window"を登録・・・。

で、m_pMainWindow->Createでウィンドウ作成、m_pMainWindow->ShowWindowでウィンドウ表示・・・。

メッセージループRun・・・。

ExitInstanceで終了処理・・・。

WinMain.cppは、

CApplicationオブジェクトを作成し、InitInstanceに失敗したら、エラーメッセージとExitInstance・・・。
成功ならRunでメッセージループ処理・・・。
Runの中でループ処理の終了時にExitInstanceはするので、deleteだけでいい・・・。

f:id:BG1:20170112004502p:plain

表示は特に変わらない・・・。

・ウィンドウクラス化 · bg1bgst333/Aoi@30bb06f · GitHub