Test

CWindow::ShowWindow

CWindowにウィンドウを表示するShowWindowを実装する・・・。といっても、Windows.hに、と宣言し、Window.cppに、と定義・・・。WindowsAPIのShowWindow呼んでるだけ・・・。 引数同じなので、::をつけてWindowsAPIであることを明確化・・・。InitInstanceで…

CWindow::Create

MFCのCFrameWnd::Createにあたるウィンドウ作成メンバ関数Createを実装する・・・。Windows.hに、とCreateを宣言・・・。 デフォルト引数やオーバーロードを使って、別の引数パターンも定義するつもりだが、まずはウィンドウ名、RECT、インスタンスハンドル…

CWindow::RegisterClass

MFCでウィンドウクラスを登録するには、AfxRegisterClassを使うが、ウィンドウに関することだし、設定項目の煩わしさを解消するために、CWindowクラスのスタティックメンバ関数としてRegisterClassを定義する・・・。Window.hに、とRegisterClassを追加・・…

CWindow

MFCのCFrameWndに相当する基本的なウィンドウクラスCWindowを作成する・・・。まず、Window.hのCWindowの定義では、ウィンドウハンドルm_hWndとコンストラクタ、デストラクタを用意・・・。といってもWindow.cppでは、コンストラクタでm_hWndをNULLにしてる…

CApplication::OnIdle

CApplicationに、アイドル処理関数OnIdleを実装する・・・。Application.hに、とOnIdleを宣言・・・。今回は、OnIdleで描画処理をするので、ウィンドウハンドルをグローバル変数g_hWndとしている・・・。定義は、として、ここに来るたびにlCountの値をTextOu…

CApplication::Run

CApplicationにメッセージループ関数Runを実装する・・・。Application.hに、とRunを宣言・・・。Application.cppには、とRunを定義・・・。 メッセージループ処理を実装・・・。 msg.wParamをintにキャストして返す・・・。このメンバ関数RunをWinMain.cpp…

CApplication::InitInstance

CApplicationに初期化関数InitInstanceをメンバ関数として実装する・・・。 また今回は、ちゃんとウィンドウを表示するようにする・・・。Application.hに、継承したときオーバーライドできるように、virtualでInitInstanceを追加・・・。一応ウィンドウを表…

CApplication

さて、ここまでウィンドウを表示するプログラムをいくつかの関数にまとめてきたが、そろそろクラス化していこうとおもう・・・。 MFCのCWinAppに相当するクラスCApplicationを実装する・・・。 といっても今回は雛形だけ・・・。Application.hを用意し、クラ…

Create

前回のTestでは、OnCreate/OnDestroyを実装したので、今回はウィンドウ作成関数Createを実装する・・・。作成時のウィンドウハンドルは、g_hWndに格納するので、戻り値は成功/失敗のBOOLでいい・・・。 今回は実装しないが、ウィンドウオブジェクトの雛形と…

OnCreate

ウィンドウが作成された時の処理を書くハンドラOnCreateを実装する・・・。オリジナルと同じで、CREATESTRUCT構造体のポインタを引数に持つ・・・。 OnCreateの定義は、0を返すだけ・・・。 これを、WindowProcのWM_CREATEが来たときに呼んで、戻り値をWindo…

OnIdle

アイドル処理OnIdleを実装する・・・。オリジナルと同じ・・・。ウィンドウハンドルは、InitInstance内で取得し、OnIdleで使うので、グローバル変数g_hWndに格納する・・・。InitInstance内のCreateWindowで作成したウィンドウのハンドルをg_hWndに格納・・…

ExitInstance

終了処理ExitInstanceを実装する・・・。オリジナルと同じ、引数なしの戻り値int・・・。Runの前にInitInstance、Runの後にExitInstanceという実装方法もあるけど、オリジナルがRunの中からExitInstanceを呼んでいるので、今回はそのように実装する・・・。…

Run

前回、初期化処理をInitInstanceにまとめたので、今度は、メッセージループ処理をRunにまとめる・・・。引数なし、戻り値int、はオリジナルと同じ・・・。Runの定義は、MSG構造体、GetMessageによるwhileループ、その中でDispatchMessageを繰り返し呼び続け…

InitInstance

ここからは、MFCを使わずにC/C++とWindowsAPIだけでアプリケーションを作る時に、どういう風に自作関数や自作クラスでプログラムをまとめていくかを書いていく・・・。とりあえずMFCベースの軽量なウィンドウクラスやアプリケーションクラスを考えているが、…

input_str_form

trim_left_lfでfgetsの末尾の改行問題が解決したので、これで入力フォーム関数input_str_formが作れる・・・。 #include <stdio.h> #include <string.h> int trim_left_lf(char *str); void input_str_form(char *caption, char *buf, int size); captionは入力フォームのタイト</string.h></stdio.h>…

trim_left_lf

プログラムの中で、標準入力から入力されたコマンドや文字列を取得する場合、C言語ではscanf、gets、fgetsなどを使って取得するのが、一般的だ・・・。しかし、scanfは文字列中に空白などがあると、文字列が切れてしまう・・・。スペース区切りで複数のパラ…