Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 26.01.2016
Сообщений: 80
1

Минимизация дочерних окон

14.10.2016, 08:32. Показов 1748. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Есть задание:

Написать приложение, обладающее следующей функциональностью:

- при последовательном нажатии клавиши <Enter> дочерние
окна главного окна приложения «Калькулятор» минимизируются;

- при последовательном нажатии клавиши <Esc> дочерние окна
восстанавливаются в обратном порядке, т.е.дочернее окно, которое
минимизировалось последним, первым будет восстановлено.

Не могу понять, что нужно для минимизации, у меня есть код для удаления кнопок калькулятора

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
#include <windows.h>
#include <vector>
#include <iostream>
#include <time.h>
 
using namespace std;
 
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
 
TCHAR szClassWindow[] = TEXT("Каркасное приложение");
vector <HWND> buttons;
size_t x = 1;
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    HWND hWnd;
    MSG lpMsg;
    WNDCLASSEX wcl;
    wcl.cbSize = sizeof(wcl);
    wcl.style = CS_HREDRAW | CS_VREDRAW;
    wcl.lpfnWndProc = WindowProc;
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hInstance = hInst;
    wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wcl.lpszMenuName = NULL;
    wcl.lpszClassName = szClassWindow;
    wcl.hIconSm = NULL;
    if (!RegisterClassEx(&wcl))
        return 0;
    hWnd = CreateWindowEx(0, szClassWindow, TEXT("Работа с таймером"), WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    MessageBox(hWnd, TEXT("Откройте калькулятор и нажмите Enter"), TEXT("Работа с таймером"), MB_OK | MB_ICONINFORMATION);
    while (GetMessage(&lpMsg, NULL, 0, 0))
    {
        TranslateMessage(&lpMsg);
        DispatchMessage(&lpMsg);
    }
    return lpMsg.wParam;
}
 
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
    TCHAR classname[100] = { 0 };
    GetClassName(hWnd, classname, 100); // получаем имя класса текущего дочернего окна
    if (!lstrcmpi(classname, TEXT("Button")))
    {
        buttons.push_back(hWnd);
    }
    return TRUE; // продолжаем перечисление дочерних окон
}
 
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    vector <HWND> ::iterator i = buttons.begin();
    srand((unsigned)time(NULL));
    size_t j = rand() % buttons.size();
    ShowWindow(*(i + j), SW_HIDE);
    buttons.erase(i + j);
    
    HWND h_kalk = FindWindow(TEXT("CalcFrame"), TEXT("Калькулятор")); // получим дескриптор "Калькулятора"
    InvalidateRect(h_kalk, NULL, TRUE);
    UpdateWindow(h_kalk); // Перерисовка окна калькулятора.
}
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_KEYDOWN:
    {
                       if (wParam == VK_RETURN)
                       {
                           HWND h = FindWindow(TEXT("CalcFrame"), TEXT("Калькулятор")); // получим дескриптор "Калькулятора"
                           if (!h)
                           {
                               MessageBox(hWnd, TEXT("Необходимо открыть "Калькулятор""), TEXT("Ошибка!!!"), MB_OK | MB_ICONSTOP);
                           }
                           else if (x == 1)
                           {
                               EnumChildWindows(h, EnumChildProc, (LPARAM)hWnd); // начинаем перечисление дочерних окон "Калькулятора"
                           }
                           x++;
                           SetTimer(hWnd, 1, 1000, TimerProc);// Установка таймера при нажатии Enter
                       }
                       else if (wParam == VK_ESCAPE)
                       {
                           KillTimer(hWnd, 1);
                       }
    }
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2016, 08:32
Ответы с готовыми решениями:

Фон дочерних окон
Здравствуйте, в общем ситуация обстоит так, нужно создать главное окно, и при левом клике на него...

Обработка сообщений от дочерних окон
Понимаю эт не серезный вопрос-но я новичок (изучаю Visul C++ токо месяц). Проблема- есть дочирнее...

Изменение z-index-а дочерних окон
Создаю два окна, потом по действиям пользователя изменяю их z-index, ничего не выходит ...

Создание 2-х типов дочерних окон
Помогите, совсем профан в этом. Не создается второе дочернее окно. В чем ошибка? // 123.cpp :...

5
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
14.10.2016, 09:28 2
ShowWindow(hChildWnd, SW_MINIMIZE);
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
14.10.2016, 11:35 3
Adamsyork, используя функции MoveWindow, SetWindowPos, можно изменить размеры и расположение кнопок.
0
2 / 2 / 0
Регистрация: 26.01.2016
Сообщений: 80
14.10.2016, 12:36  [ТС] 4
prokl9tiy, это куда?

Добавлено через 46 минут
Alex5, а можно подробнее про SetWindowPos?
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
14.10.2016, 16:47 5
Цитата Сообщение от Adamsyork Посмотреть сообщение
подробнее про SetWindowPos?
SetWindowPos function. Changes the size, position, and Z order of a child, pop-up, or top-level window.
0
2 / 2 / 0
Регистрация: 26.01.2016
Сообщений: 80
14.10.2016, 16:52  [ТС] 6
Alex5, не совсем понял, где в коде его применить. Помогите пожалуйста
0
14.10.2016, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2016, 16:52
Помогаю со студенческими работами здесь

Создание дочерних окон в окне
Всем привет!!! Как мне создать дочерние окна в главном окне программы,пример таких окон на...

Закрытие всех дочерних окон
У меня есть программа которая по нажатию ЛКМ создает дочернее окно. Мне нужно закрыть все дочерние...

Перехват сообщений дочерних окон
Каким образом перехватываются сообщения дочерних окон класа &quot;button&quot;, &quot;edit&quot;. Например при нажатии...

Создание своих дочерних окон
Всем здрасьте ! У меня проблема с Моими дочерними окнами. Может где надо какой стиль добавить,...


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

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