建立一個簡單的計時器

來源:互聯網
上載者:User

標籤:

#include<windows.h>
#include<tchar.h>
#define TIME 5

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    WNDCLASS clock;
    static TCHAR* szAppName = TEXT("定時喚醒程式");
    HWND hwnd = NULL;
    MSG msg;

    clock.style = CS_HREDRAW | CS_VREDRAW;
    clock.lpfnWndProc = WndProc;
    clock.cbClsExtra = 0;
    clock.cbWndExtra = 0;
    clock.hInstance = hInstance;
    clock.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    clock.hCursor = LoadCursor(NULL, IDC_ARROW);
    clock.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    clock.lpszMenuName = NULL;
    clock.lpszClassName = szAppName;

    if (!RegisterClass(&clock))
    {
        MessageBox(NULL, TEXT("這個程式只能在Win32下運行!"), TEXT("錯誤!!!"), MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(szAppName,
        TEXT("休息休息!"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        400,
        100,
        NULL,
        NULL,
        hInstance,
        NULL);

    ShowWindow(hwnd, iCmdShow);

    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    TCHAR words[1024];

    switch (message)
    {
    case WM_CREATE:
        SetTimer(hwnd, 1, 1000 * 60 * TIME, NULL);
        break;


    case WM_PAINT:

        hdc = BeginPaint(hwnd, &ps);

        GetClientRect(hwnd, &rect);

        DrawText(hdc, TEXT("該喝水了!——DrawText( );"), -1, &rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
        TextOut(hdc, 0, 0, words, wsprintf(words, TEXT("該喝水了!——TextOut();")));

        EndPaint(hwnd, &ps);

        return 0;


    case WM_TIMER:
        ShowWindow(hwnd, SW_SHOWNORMAL);
        break;


    case WM_DESTROY:
        KillTimer(hwnd, 1);
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

程式使用的函數:

SetTimer(hwnd, 1, 3000, NULL);                —一個計時器函數
    1——計時器編號
    3000——時間,以毫秒為單位

KillTimer(hwnd, 1);                    ——移除計時器, 一般與SetTimer 成對使用
    1——計時器編號



RECT結構            ——rect這個對象是用來儲存成對出現的參數, 比如矩形的坐上角座標、寬度和高度
    left——指定矩形框左上方的 x 座標
    top——……………………y 座標
    right——指定矩形框右下角的 x 座標
    bottom——……………………y 座標



GetClientRect(hwnd, lpRect);                ——將視窗的客戶區的座標寫入 RECT 的結構中
    lpRect——指向 RECT 結構的指標中



DrawText(hac, lpString, nCount, lpRect, uFormat);    ——輸出字元函數
    lpString——字串指標
    nCount——字串長度, 如果為 -1 則自動計算 ‘\0‘ 之前的字串長度
    uFormat——設定字元輸出在視窗的樣式
            DT_CENTER:指定文本水平置中顯示。
            DT_SINGLELINE:單行顯示文本,斷行符號和分行符號都不斷行。
            DT_VCENTER:指定文本垂直置中顯示。該標記只在單行文本輸出時有效,所以它必須與DT_SINGLELINE結合使用



TextOut(hdc, x, y, lpString, nCount);            ——輸出字元函數
    x——開始繪製文字的左上方距視窗左邊的距離
    y——……………………右上方…………



ShowWindow(hwnd, nCmdShow);    ——視窗顯示設定
    nCmdShow——指定視窗如何顯示
            SW_SHOW:在視窗原來的位置以原來的尺寸啟用和顯示視窗
            SW_HIDE:隱藏視窗並啟用其他視窗
            SW_RESTORE:啟用並顯示視窗。如果視窗最小化或最大化,則系統將視窗恢複到原來的尺寸和位置
            …………
            …………

 

 

FlashWindow(hwnd, TRUE);      ——視窗圖表閃動函數

  TRUE——TRUE指即使視窗處於啟用狀態也閃動視窗圖表,

        FALSE 指只有視窗處於未啟用狀態才閃動圖表

建立一個簡單的計時器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.