MFC - CTime
MFCはWin32 SDKレベルのプログラミング手法に
C++の概念を取り入れた
アプリケーションの作成を容易にするクラスライブラリ。
※Borland社コンパイラ付属の OWL:Object Window Libraryに相当。
CTime Timer Sample
時刻表示サンプル 最少構成のサンプルに 下記を追加し、画面上部に現在時刻を表示する例です。
時刻表示例
file:app.h
// Main Window Class
class MFCBase : public CFrameWnd {
public:
MFCBase(); // Constructor
// Processing Left-Click Message
afx_msg void OnLButtonDown(UINT, CPoint);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
// Application Class
class MFCApp : public CWinApp {
public:
BOOL InitInstance();
};
file:app.cpp
// Minimum MFC app
#include <afxwin.h>
#include <time.h>
#include "app.h"
// Message Buffer
char szBuff[128];
// Create Window
MFCBase::MFCBase() {
// 画面左上部配置、320x240のサイズ
RECT rect;
rect.top = 0;
rect.left = 0;
rect.right = 320;
rect.bottom = 240;
Create(NULL, "MFC CTime Sample",
WS_OVERLAPPEDWINDOW, rect);
}
// Initialize Application
BOOL MFCApp::InitInstance() {
m_pMainWnd = new MFCBase;
// Launch Timer
if(m_pMainWnd->SetTimer(1, 1000, NULL) != 1) {
return FALSE;
}
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
// Message of Application
BEGIN_MESSAGE_MAP(MFCBase, CFrameWnd)
ON_WM_PAINT()
ON_WM_TIMER(()
ON_WM_DESTROY()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
// WM_LBUTTONDOWN
afx_msg void MFCBase::OnLButtonDown(UINT flg, CPoint location) {
MessageBox("左クリック検知", "Debug", MB_OK);
}
// Processing WM_PAINT
afx_msg void MFCBase::OnPaint() {
CPaintDC dc(this);
dc.TextOut(1, 1, strBuff, strlen(strBuff));
}
// Processing WM_ON_TIMER
afx_msg void MFCBase::OnTimer(UINT id) {
CTime currentTime = CTime::GetCurrentTime();
struct tm newtm; // A structure containing time elements.
currentTime.GetLocalTime(&newtm);
asctime_s(strBuff, sizeof(strBuff), &cur);
strBuff[strlen(strBuff) - 1] = '\0';
InvalidateRect(NULL, 0);
}
// Processing WM_DESTROY
afx_msg void MFCBase::OnDestroy() {
KillTimer(1);
}
MFCApp App; // Create instance of application.