Google

東海大学理学部物理学科素粒子理論・安江研究室  

ホーム 最新情報 サイトマップ

画面描画

上へ 始まり 準備 登録 作成 初期設定 メッセージ処理 画面出現 画面描画 メッセージ送信機能 終了処理 登録抹消 詳細説明

【8】 ウィンドウズ描画

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関数の例

秒が変わったら表示するため、OnTimer関数内で秒の変化を記録します。そのためgszDateAndTimeという文字型の配列を用意します。MessageWM_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.w
Milliseconds);
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;
}
目次へ戻る

前へ ホーム 上へ 次へ

このWeb サイトではインターネットエクスプローラVer.3.0あるいはそれ以上が推奨です Internet Explorer
この Web サイト(since 1997年12月1日)に関する質問やコメントについては、Mail.gif (4196 バイト)安江 まで電子メールをお送りください。
Copyright © 1997-2022/10 東海大学理学部物理学科安江研究室 All rights reserved
最終更新日: 2022年10月14日
マイクロソフト Front Page98