BOOL OnCreate(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
これはどんな名前でも、いくつ引数を取ってもいいです。ここでは次に現れるメッセージ処理関数MainWndProcのとる引数を用いています。この4つはすべてシステムが決めてきます。 WM_CREATEメッセージが着きます。
- hWnd:ウィンドウズハンドル(CreateWindow関数から返された値と同じです)
- Message:メッセージ(WM_CREATEという値を持っている:#define WM_CREATE 0x0001)
- wParam:システムから送ってくるデータでどんな値があるのかはWM_CREATのヘルプを参照(使用せず)
- lParam:システムから送ってくるデータでどんな値があるのかはWM_CREATのヘルプを参照(使用できます)
いよいよウィンドウズ用プログラミングの開始です。ここまでは通常のCプログラミングとほぼ同じです。ここからウィンドウズ特有のメッセージ処理が始まります。CreateWindowによって、wndclass.lpfnWndProc( = MainWndProc)で指定した関数(この例ではMainWndProc)にWM_CREATEが渡されます。そこでこれからMainWndProcでWM_CREATE
を受け取ってそこでの処理に移ります。ここでは、その処理をする関数をBOOL
OnCreate(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)とします。
CreateWindowで使ったパラメータがlParamにきます。取り出すときは「LPCREATESTRUCT
lpCreateStruct = (LPCREATESTRUCT) lParam」で取り出せます。
使う自前カーソルやアイコンやビットマップや特殊な色など設定します。設定したものはだいたい終了時に破棄します。ここでタイマーなんかを設定してみます。終わるときにはKillTimer関数で終了処理をしますこの場合「100」にしてるので100ミリ秒ごとにWM_TIMERを発生します。
|
UINT idTimer; |
|
|
|
BOOL OnCreate(HWND
hWnd, UINT Message, WPARAM wParam, LPARAM lParam) |
|
{ |
|
|
|
idTimer = 1; |
|
|
|
|
|
if(!SetTimer(hWnd,
idTimer, 100, (TIMERPROC)NULL)){ |
|
|
|
// タイマーが使えない |
|
|
|
idTimer = 0; |
|
|
} |
|
|
|
|
|
return FALSE; |
|
} |
|
|