/**************/ /* 画面時計 */ /* GUI版 */ /**************/ #include #include #include #include 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); }