UpdateWindow(HWND hWnd)
画面が書き変わったことをウィンドウズに知らせ、表示してもらいます。その結果、WM_PAINT(その他のよく使うメッセージ)が着くので、自前で画面に表示するときは、OnPaint関数で処理をします。
OnPaint関数の例
画面で時刻が刻々と変わるようにしてみましょう。そのため、秒が変わったらWM_TIMER(その他のよく使うメッセージ)が着くので、即表示するためのOnTimer関数も使用します。一定時間の刻みはOnCreate関数内のSetTimer関数で100ミリ秒後とに刻むように用意してあります。 gszDateAndTime[256]という文字型の配列を用意し、時刻を覚えておきます。これをOnTimerとOnPaintで使用します。MessageにWM_PAINTメッセージがきます。wParamとlParamには決められた情報が着ます。
OnPaint(HWND hWnd,
UINT Message, WPARAM wParam, LPARAM lParam) |
{ |
|
PAINTSTRUCT ps; |
|
HDC hDC; |
|
RECT rc; |
|
CHAR sz_message[] = "成功した!!!! Escキーを押すと終了します"; |
|
COLORREF old_color; |
|
|
|
hDC = BeginPaint(hWnd, &ps); |
|
|
|
if(hDC){ |
|
|
GetClientRect(hWnd, &rc); |
|
|
|
|
|
// 文字色を青色にします |
|
|
old_color = SetTextColor(hDC, RGB(0,0,0xff)); |
|
|
if(old_color !=
CLR_INVALID){ |
|
|
|
DrawText(hDC, sz_message,
strlen(sz_message), &rc, DT_CENTER | DT_VCENTER); |
|
|
|
if(*gszDateAndTime){ |
|
|
|
|
DrawText(hDC, gszDateAndTime,
strlen(gszDateAndTime), &rcDateAndTime, DT_CENTER |
DT_VCENTER); |
|
|
|
} |
|
|
|
|
SetTextColor(hDC,
old_color); |
|
|
} |
|
} |
|
|
|
EndPaint(hWnd, &ps); |
} |
|
秒が変わったら表示するため、OnTimer関数内で秒の変化を記録します。そのためgszDateAndTimeという文字型の配列を用意します。MessageにWM_TIMERメッセージ(その他のよく使うメッセージ)がきます。wParamとlParamには決められた情報が着ます。
OnTimer(HWND hWnd, UINT
Message, WPARAM wParam, LPARAM lParam) |
{ |
|
HDC hDC; |
|
RECT rc; |
|
TEXTMETRIC textmetric; |
|
SYSTEMTIME localtime; |
|
COLORREF old_color; |
|
CHAR sz_day[][3] = {"日", "月", "火", "水",
"木", "金", "土"}; |
|
|
|
GetLocalTime(&localtime); |
|
wsprintf(gszDateAndTime, "%u-%02u-%02u (%s) %02u:%02u:%02u:%03u", localtime.w Year, localtime.wMonth, localtime.wDay, sz_day[localtime.wDayOfWeek], localtime.wHour, localtime.wMinute, localtime.wSecond,
localtime.wMilliseconds); |
|
|
|
hDC = GetDC(hWnd); |
|
|
|
if(hDC){ |
|
|
GetTextMetrics(hDC, &textmetric); |
|
|
GetClientRect(hWnd, &rc); |
|
|
SetRect(&rcDateAndTime, rc.left, rc.top+textmetric.tmHeight, rc.right, rc.bottom); |
|
|
// 時間が変更されると赤色で表示されるます |
|
|
old_color = SetTextColor(hDC, RGB(0xff,0,0)); |
|
|
DrawText(hDC, gszDateAndTime, strlen(gszDateAndTime), &rcDateAndTime, DT_CENTER |
DT_VCENTER); |
|
|
if(old_color != CLR_INVALID){ |
|
|
|
SetTextColor(hDC, old_color); |
|
|
} |
|
|
|
ReleaseDC(hWnd, hDC); |
|
} |
|
|
|
return TRUE; |
} |
|
|