Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 39

Открытие второго НЕ дочернего окна по таймеру

13.03.2019, 21:44. Показов 972. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как сделать так, чтобы при запуске программы открывалось первое окно и затем через несколько секунд рядом открывалось второе НЕ дочернее окно.

Вот так создаю таймер в WndProc
C++
1
2
3
4
5
case WM_CREATE:
    {
        SetTimer(hWnd, 0, 5000, NULL);
    }
    break;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2019, 21:44
Ответы с готовыми решениями:

Открытие дочернего окна
Здрасьте. Подскажите что я не так делаю. Хочу открыть окно по нажатию кнопки. Я открывал, просто создавая его по нажатию. А как его...

Открытие дочернего окна в MDI приложении внутри вкладки TabControl
Вообщем обычное с виду MDI приложение. Есть родительская форма MainForm на ней расположен TabControl. При открытии дочернего окна ChildForm...

Открытие дочернего окна, передача данных между ViewModel-ями окон
Добрый день. Есть концептуальный вопрос по разработке приложений с использованием паттерна MVVM. А именно открытие дочернего окна из...

1
65 / 31 / 18
Регистрация: 16.03.2019
Сообщений: 84
20.03.2019, 10:43
Здравствуйте.

1. Для второго окна нужно создать свою функцию обработки сообщений WndProc .
2. В функции WinMain нужно зарегистрировать класс 2-го окна.
3. Далее в вашем коде при обработке WM_CREATE устанавливаете таймер.
Срабатывание таймера можно организовать 2-мя способами:
- с помощью посылки сообщения окну;
- с помощью функции обратного вызова.
Какой способ выбрать - решать вам.
При срабатывании таймера создаете и показываете окно.

Далее показано как организовать таймер с помощью посылки сообщения окну, и создать 2-е окно.
WinMain.cpp :
C++
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
..... Здесь возможно что-то для основного окна
 
LPCSTR szWindowClass2 = "MyWindowClass2";
LPCTSTR szTitle2 = "Заголовок моего окна2";
 
HINSTANCE hInst; // Дескриптор экземпляра приложения
const UINT_PTR nStartTimer1 = 1; // ID - таймера
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   // функция основного окна
LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM); // функция 2-го окна
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,   LPSTR lpCmdLine, int nCmdShow )
{
        hInst = hInstance;
        
        .... Здесь регистрируем класс основного окна
 
               //----------------------------------
               // Регистрируем класс 2-го окна
        WNDCLASSEX wcex;
 
        wcex.cbSize = sizeof(WNDCLASSEX);
 
        wcex.style          = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc2;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 0;
        wcex.hInstance      = hInstance;
        wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
        wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName   = NULL;
        wcex.lpszClassName  = szWindowClass2;
        wcex.hIconSm        = NULL;
 
        RegisterClassEx(&wcex);
               //----------------------------------
 
               ..... Здесь Создаем и показываем основное окно
 
 
        // Основной цикл обработки сообщений:
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
                if (TranslateMessage(&msg) == 0)
                {
                        DispatchMessage(&msg);
                }
        }
 
    return (int) msg.wParam;
}
 
//  WndProc Основного окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT ps;
        switch (message)
        {
 
        case WM_PAINT:
                {
                        hdc = BeginPaint(hWnd, &ps);
                        
                        ....... Здесь чего-то рисуем...
 
                         EndPaint(hWnd, &ps);
                }
                break;
        case WM_TIMER:
                if (nStartTimer1 == wParam)
                { // Это наш таймер сработал
                    KillTimer(hWnd, nStartTimer1); // Уничтожаем таймер, чтобы в следующие раз не сработал
 
                    {   // Создаем и показываем 2-е окно
                        HWND hWnd2 = CreateWindow(szWindowClass2, szTitle2, WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);
 
                        if (!hWnd2)
                            break;
 
                        ShowWindow(hWnd2, SW_SHOWNORMAL); // SW_SHOWNORMAL - В каком виде показываем
                        UpdateWindow(hWnd2);
                    }
                }
                break;
        case WM_CREATE:
                    SetTimer(hWnd, nStartTimer1, 5000, NULL);
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
}
 
//  WndProc 2-го окна окна
LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        PAINTSTRUCT ps;
        HDC hdc;
 
        switch (message)
        {
 
        case WM_PAINT:
                {
                        hdc = BeginPaint(hWnd, &ps);
 
                                                .... Здесь чего-то рисуем во 2-м окне
                        EndPaint(hWnd, &ps);
                }
                break;
        // - если от закрытия этого окна нужно завершить приложение - раскомментируйте       
        //case WM_DESTROY:
        //      PostQuitMessage(0);
        //      break;
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2019, 10:43
Помогаю со студенческими работами здесь

Открытие второго окна
Всем привет! У меня есть окно, в котором имеются различные элементы. Нужно сделать так, чтобы при нажатии на определённую кнопку поверх...

Открытие второго окна
Добрый день! Подскажите пожалуйста, как сделать так, чтобы при открытии второго окна первое окно становилось недоступным? Еще , как...

Открытие второго окна
Хочу открывать 2 окно после нажатия на кнопку в 1 окне.1 окно открывается,но после нажатия кнопки ничего не открывается. Путём тестирования...

JavaFX - открытие второго окна по кнопке
Здравствуйти товарищи! Я в FX совсем совсем не давно, суть вопроса: Нужно по нажатию кнопки открыть вторую форму. Наример форму...

Открытие второго окна по клику кнопки в первом
Доброе время. У меня есть 2 окна в программе. Первое с Дата гридом а во втором таблица для внесения данных в базу данных. На...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru