![]()
![]()
| 1,CTime |
| 2,タイマー |
時間を扱いクラスとしてCTimeクラスがあります。
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString st;
CTime t;
t=CTime::GetCurrentTime();
st=t.Format("%H:%M:%S");
pDC->TextOut(0,0,st);
}
これは、t=CTime::GetCurrentTime()で現在の時間をtに代入しています。
t.Format("%H:%M:%S")でフォーマットを12:34:56のようなパターンにしています。
%xの部分がそっくり数字に入れ替わるわけです。
%xには次のような種類があります。
これを実行すると
| %Y | 年(4桁) |
| %y | 年(2桁) |
| %B | 月(例:August) |
| %b | 月(例:Aug) |
| %m | 月(1〜12) |
| %A | 曜日(例:Saturday) |
| %a | 曜日(例:Sat) |
| %d | 日 |
| %H | 時 |
| %M | 分 |
| %S | 秒 |

時間を得る関数は次のようなものがあります。
| 関数 | 意味 |
| CTime::GetDay( ) | 日にち |
| CTime::GetDayWeek( ) | 曜日 1:日曜 〜 7:土曜 |
| CTime::GetHour( ) | 時間 0〜23 |
| CTime::GetMinute( ) | 分 0〜59 |
| CTime::GetMonth( ) | 月 1〜12 |
| CTime::GetSecond( ) | 秒 0〜59 |
| CTime::GetYear( ) | 年(4桁) 1970〜2038 |
たとえば、
year=t.GetYear();
を実行すれば、データが得られます。
一定時間ごとに関数を呼び出すことができます。
これは、SetTimer関数とKillTimer関数を用います。
SetTimer関数は、一定時間ごとにOnTimer関数を実行するように
設定する関数で、KillTimer関数でそれを解除します。
SetTimerはWindowができた後に設定するのでここでは、OnCreate関数内で
設定します。(コントラスタ内ではできません。)
KillTimer関数もOnDestroy関数内におきます。
(デコントラスタ内ではできません。)
先ほどのプログラムを利用して応用します。
以下のようにメッセージハンドラをClassWizardでつくります。
| クラス | メッセージ | メンバ関数 |
| CNamaeView | Windowが作成された | OnCreate |
| CNamaeView | Windowが破棄された | OnDestroy |
| CNamaeView | 一定の時間になった(WM_TIMER) | OnTimer |
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString st;
CTime t;
t=CTime::GetCurrentTime();
st=t.Format("%H:%M:%S");
pDC->TextOut(0,0,st);
}
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(1,1000,NULL);
return 0;
}
void CTestView::OnDestroy()
{
CView::OnDestroy();
KillTimer(1);
}
void CTestView::OnTimer(UINT nIDEvent)
{
CRect r(0,0,100,30);
InvalidateRect(&r,TRUE);
CView::OnTimer(nIDEvent);
}
SetTimerの最初の引数は0以外の数値を入れます。
2番目はどのぐらいの時間ごとに読み出すかを指定します。単位は[m
sec]です。
3番目は、NULLにします。
KillTimerの引数はSetTimerの1番目の引数と同じ番号にします。
OnTimer関数で、時間になると特定の範囲の絵を消して、OnDraw関数を実行しています。

これを実行すると先ほどと同じものが表示され数値が動きます。
C++のPageに戻る