/**************/
/* 画面時計 */
/* GUI版 */
/**************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <windows.h>
HWND hWnd=NULL; // ウィンドウのハンドル
MSG msg; // ウィンドウ メッセージ
int endFG=0; // 終了フラグ
void SETwindow(void); // ウィンドウ初期設定
void byouga(unsigned long); // 時計描画
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // ウィンドウプロシージャ
void main( )
{
unsigned long t,tO=0;
int ir;
SETwindow( ); // ウィンドウ初期設定
tO=time(NULL); // 現在の時刻(秒)
byouga(tO); // 時計描画
while( endFG==0 )
{
t=time(NULL); // 現在の時刻(秒)
if ( t!=tO )
{
byouga(t); tO=t; // 時計描画
Sleep(990);
}
ir=PeekMessage(&msg,hWnd,0,0,PM_REMOVE); // windowsメッセージ取得
if ( ir==0 ) continue; // メッセージなし
TranslateMessage(&msg); // メッセージ変換
DispatchMessage (&msg); // メッセージ送出
if ( endFG!=0 ) break;
}
DestroyWindow(hWnd); // ウィンドウ破棄
}
void SETwindow( )
/*----------------------*/
/* ウィンドウ初期設定 */
/*----------------------*/
{
WNDCLASS wc; // ウィンドウ クラス
DWORD Wstyle; // ウィンドウ・スタイル
//--ウィンドウクラス設定--
wc.lpszClassName="画面時計"; // ウィンドウ・クラス名
wc.lpszMenuName =NULL; // クラス・メニュー・リソース名
wc.hInstance =GetModuleHandle(NULL); // インスタンス・ハンドル
wc.lpfnWndProc =WndProc; // ウィンドウ・プロシージャ関数名
wc.hCursor =LoadCursor(NULL,IDC_ARROW); // クラス・カーソル
wc.hIcon =NULL; // クラス・アイコン
wc.hbrBackground=GetStockObject(BLACK_BRUSH); // クラス背景ブラシ
wc.style =CS_OWNDC| // クラス・スタイル
CS_BYTEALIGNCLIENT|
CS_BYTEALIGNWINDOW;
wc.cbClsExtra =0; // 補足クラス・メモリ
wc.cbWndExtra =0; // 補足ウィンドウ・メモリ
//--ウィンドウ・スタイル設定--
Wstyle= WS_OVERLAPPED| // 自動表示位置
WS_SYSMENU| // 閉じる可能
WS_MINIMIZEBOX; // 最小化可
RegisterClass(&wc); // ウィンドウ・クラス登録
//--ウィンドウ生成--
hWnd=CreateWindow(wc.lpszClassName, // クラス名
wc.lpszClassName, // ウィンドウ名(実行ファイル)
Wstyle, // ウィンドウ・スタイル
0, // ウインドウ水平位置
0, // ウインドウ垂直位置
300, // ウィンドウXサイズ(枠含)
100, // ウィンドウYサイズ(枠含)
NULL, // 親ウィンドウ・ハンドル
NULL, // メニューハンドル
wc.hInstance, // アプリケーション・インスタンス・ハンドル
NULL); // ウィンドウ作成データ
ShowWindow(hWnd,SW_SHOWDEFAULT); // ウィンドウ表示状態設定
}
void byouga(
/*------------*/
/* 時計描画 */
/*------------*/
unsigned long t)
{
HDC hdc; // デバイスコンテキストハンドル
HFONT hfont; // 論理フォントハンドル
char c[128];
//--表示--
hdc=GetDC(hWnd); // ウィンドウのDC取得
SetBkMode(hdc,OPAQUE); // 文字の背景=不透明
SetTextColor(hdc,RGB(255,128, 0)); // テキスト色設定
SetBkColor (hdc,RGB( 0, 0, 0)); // 背景色=黒
//--フォント--
hfont=CreateFont( // フォント・オブジェクト生成
32, // フォントの論理高
28, // 文字の論理幅
0, // テキスト行の角度
0, // ベースラインとx軸の角度
FW_THIN, // フォント太さ(標準)
FALSE, // イタリック体フラグ
0, // アンダーラインフラグ
FALSE, // バーチカルラインフラグ
SHIFTJIS_CHARSET, // 文字セット識別子
OUT_TT_PRECIS, // 出力精度
CLIP_TT_ALWAYS, // クリッピング精度
PROOF_QUALITY, // 出力品質
FIXED_PITCH|FF_MODERN, // ピッチ
"MS ゴシック"); // タイプフェイス名
// "MS 明朝"); // タイプフェイス名
SelectObject(hdc,hfont); // フォント設定
sprintf(c,"%.8s",ctime(&t)+11); // 時分秒(8文字)
TextOut(hdc,30,20,c,strlen(c)); // 文字列描画
DeleteObject(hfont); // フォントオブジェクト削除
ReleaseDC(hWnd,hdc); // ウィンドウのDC解放
}
LRESULT CALLBACK WndProc(
/*--------------------------*/
/* ウィンドウプロシージャ */
/*--------------------------*/
HWND hwnd, // ウィンドウ・ハンドル
UINT uMsg, // メッセージID
WPARAM wParam, // 第1メッセージ・パラメータ(無符号)
LPARAM lParam) // 第2メッセージ・パラメータ(有符号)
{
PAINTSTRUCT hpaint; // 描画情報
BOOL ir=0;
switch( uMsg )
{
case WM_CLOSE://--ウィンドウ閉--
PostQuitMessage(0); // 実行終了
endFG=1;
break;
case WM_PAINT://--ウィンドウ更新--
case WM_SETFOCUS://--フォーカス取得--
break;
default://--その他--
ir=DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return(ir);
}
|