0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 2
1

Таймер в WinApi или вызов функций по таймеру

02.01.2020, 17:12. Показов 1518. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте. Возникла необходимость нарисовать в окне составной график. Однако есть небольшое но: каждый элемент графика должен отрисовываться через 10 секунд после предыдущего.

Я предполагаю, что сколько частей у моего графика, столько и функций мне необходимо вызвать по истечению таймера.

Как я должен вызывать функции в таком случае?

Вот что я имею на данный момент:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void DrawXAxis(HWND hwnd, HDC hdc, int sy, int sx) { //отрисовка оси Ох
    int a = sx / 2;
    int b = sy / 2;
    MoveToEx(hdc, 0, b, NULL);
    LineTo(hdc, sx, b);
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    static HPEN redPen, bluePen, greenPen, blackPen;
    int a, b, x, y, R;
    static int sx, sy;
    switch (message)
    {
    case WM_CREATE:
        redPen = CreatePen(PS_DOT, 4, RGB(255, 0, 0));
        bluePen = CreatePen(PS_SOLID, 4, RGB(0, 0, 255));
        greenPen = CreatePen(PS_SOLID, 4, RGB(0, 255, 0));
        blackPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
 
        SetTimer(hWnd, 1, 1000, NULL);
 
        break;
    case WM_SIZE: {
        sx = LOWORD(lParam);
        sy = HIWORD(lParam);
        break;
    }
    case WM_TIMER: {
        MessageBeep(-1);
        InvalidateRect(hWnd, NULL, true);
        break;
    }
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            DrawXAxis(hWnd, hdc, sy, sx);
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        KillTimer(hWnd, 1);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2020, 17:12
Ответы с готовыми решениями:

Вызов функций WinApi
как это сделать в C++/CLI?

Вызов функций или копипаст кода?
Хочу обратиться к более опытным обитателям данного форума. Собственно вопрос очень простой. Как...

Вызов процедур или функций через select
Нужно что бы с помощью этого выпадающего окна вызывались определенные функции и процедуры. например...

Форматированный вывод массива в Edit используя WinAPI или встроенные функций MASM
Значения некоторого массива заполняют некоторый буфер следующим образом: ;начало цикла mov eax, ...

1
Заблокирован
02.01.2020, 18:00 2
NIGGERFAGGOT1, думаю, что-то подобное
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <windows.h>
 
#define TIMER_ID    2020
#define TIMER_DELAY 1000
UINT_PTR g_nTimer;
 
void OnTimer(HWND hWnd, WPARAM wParam)
{
    static int nCount;
 
    if(TIMER_ID==wParam)
    {
        TCHAR Str[128]=TEXT("");
        wsprintf(Str, TEXT("OnTimer: %d seconds"), nCount += 1);
        SetWindowText(hWnd, Str);
 
        if( 10==nCount )
            InvalidateRect(hWnd, NULL, true);
    }
}
 
void DrawXAxis(HWND hwnd, HDC hdc, int sy, int sx)
{
    int a = sx / 2;
    int b = sy / 2;
    MoveToEx(hdc, 0, b, NULL);
    LineTo(hdc, sx, b);
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    static HPEN redPen, bluePen, greenPen, blackPen;
    int a, b, x, y, R;
    static int sx, sy;
    switch (message)
    {
    case WM_CREATE:
        redPen = CreatePen(PS_DOT, 4, RGB(255, 0, 0));
        bluePen = CreatePen(PS_SOLID, 4, RGB(0, 0, 255));
        greenPen = CreatePen(PS_SOLID, 4, RGB(0, 255, 0));
        blackPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
 
        g_nTimer=SetTimer(hWnd, TIMER_ID, TIMER_DELAY, NULL);
        if(!g_nTimer)
        {
            MessageBox(hWnd, TEXT("Failed SetTimer"), TEXT("Err"),
                MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
            return -1;
        }
        break;
 
    case WM_SIZE: {
        sx = LOWORD(lParam);
        sy = HIWORD(lParam);
        break;
    }
 
    case WM_TIMER:
        OnTimer(hWnd, wParam);
        break;
 
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            DrawXAxis(hWnd, hdc, sy, sx);
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        if(g_nTimer)
            KillTimer(hWnd, g_nTimer);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
02.01.2020, 18:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2020, 18:00
Помогаю со студенческими работами здесь

Вызов функции до ее определения или область видимости функций в FireFox
Добрый день! Наткнулся на такую особенность в FireFox - если использовать такую конструкцию: {...

Таймер: Как сделать обновление по таймеру?
String myArr = new string; myArr = &quot;массив с первыми значениями&quot;; myArr =...

Таймер обратного отсчёта(событие по таймеру)
Здравствуйте, может кто подсказать как реализовать такое?В общем нужен таймер обратного отсчёта, по...

Вызов функции по таймеру
Здравствуйте. По нажатию на кнопку (на форме) вызывается функция, скажем, SomeFunction (); которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru