Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для XoPToN
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52

Вывести окно примитивного калькулятора

23.08.2017, 18:07. Показов 2227. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать приложение, обладающее следующей функциональностью:
- появляется окно примитивного калькулятора, в котором присутствуют все
цифровые кнопки (0-9);
- после нажатия на клавишу <ENTER> с периодичностью выбранного промежутка
времени, к примеру в одну секунду или другой величины, прячется одна из кнопок,
выбранная случайным образом, причём при исчезновении новой-старая
восстанавливается;
- после нажатия клавиши <ESC> данный процесс останавливается.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2017, 18:07
Ответы с готовыми решениями:

Создать окно для калькулятора
Как рисовать окошки , закрашивать их и тп ? Например, мне нужно создать окошко , для калькулятора( стандартный )

Как вывести десятичное число на экран калькулятора
Доброго времени суток. Я начинающий программист. Вопрос таков. Составил код к калькулятору в Xcode, но не понимаю как вывести на экран...

Написание примитивного ИИ
Здравствуйте, форумчане =) Опять прошу у вас помощи: Собственно имеется игровое поле,в нем красный прям-к это враг, зеленый это...

3
0 / -1 / 0
Регистрация: 06.12.2016
Сообщений: 18
23.08.2017, 21:39
Выдает ошибку, ну если разберешься то отпишись.

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
#include<windows.h>
#include<time.h>
#include<vector>
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
TCHAR szClassWindow[] = TEXT("Каркасное прложение");
std::vector <HWND> Button;
static int count = 0;
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);
    while (GetMessage(&lpMsg, NULL, 0, 0))
    {
        TranslateMessage(&lpMsg);
        DispatchMessage(&lpMsg);
    }
    return lpMsg.wParam;
}
 
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
    HWND hWindow = (HWND)lParam; // дескриптор окна нашего приложения
    TCHAR capt_surch[] = TEXT("Button");
    TCHAR classname[100] = { 0 };
    TCHAR caption[20];
    HWND hButton;
    GetClassName(hWnd, classname, 100);//получаем имя класса текущего дочернего окна
    GetWindowText(hWnd, caption, 100);//получаем текст заголовка текущего дочернего окна
    hButton = FindWindow(classname, caption);
    if (!lstrcmp(capt_surch, caption))//Если имена классов совпадают(для кнопок это "Button" )
        Button.push_back(hButton);//заполняем массив хэндэлами этих кнопок
    return TRUE; // продолжаем перечисление дочерних окон
}
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND h = FindWindow(TEXT("CalcFrame"), TEXT("Калькулятор"));
    if (!h)
        MessageBox(hWnd, TEXT("Неоходимо открыть"Калькулятор""), TEXT("Ошибка!!!"), MB_OK | MB_ICONSTOP);
    EnumChildProc(h, lParam);
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_TIMER:
    {
                     HWND hButton; //Хэндл для удаления кнопки
                     srand(time(NULL));
                     std::vector<HWND>::iterator itr;//итератор для манипуляций с вектром
                     itr = Button.begin();//устанавливаем итератор на начало
                     int i = rand() % Button.size();//случайное число
                     for (int j = 0; j == i; j++) itr++;//перемещаем итератор
                     hButton = *itr;//присваиваем зачение хэндэлу кнопки
                     DestroyWindow(hButton);//уничтожаем кнопку
                     Button.erase(itr);//извлекаем хэндл убитого окна из Вектра
                     break;
    }
    case WM_KEYDOWN:
        if (wParam == VK_RETURN)//установка таймера при нажатии ентера
            SetTimer(hWnd, 1, 1000, NULL);
        else if (wParam == VK_ESCAPE)
            KillTimer(hWnd, 1);//оключение при нажатии ескейп
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
1
 Аватар для XoPToN
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52
24.08.2017, 13:48  [ТС]
Цитата Сообщение от Bybeska Посмотреть сообщение
Выдает ошибку, ну если разберешься то отпишись.
Ошибка в 81 строке
Цитата Сообщение от Bybeska Посмотреть сообщение
int i = rand() % Button.size();//случайное число
Как исправить не знаю
0
 Аватар для XoPToN
1 / 2 / 0
Регистрация: 20.01.2017
Сообщений: 52
31.08.2017, 16:54  [ТС]
Все,допер как сделать,выложу готовый вариант,может вдруг кому пригодится

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
#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;
size_t j,t;
 
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));
        t=j;
    ShowWindow (*(i+t),SW_SHOW);
    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;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2017, 16:54
Помогаю со студенческими работами здесь

Ошибка примитивного кода
Выдает ошибку, непонятно почему. template &lt;class T&gt; class myclass { public: int big,small,huge,medium; myclass(huge =...

Написание примитивного js скрипта.
Здравствуйте! Помогите пжлст... Нужен js скрипт, который сам пишет в опр. место случайное слово из списка. Я пишу такой, но никакой...

Создание примитивного окна
Здравствуйте. Начал изучать Win32 API и написал примитивное приложение. Но выводит ошибку. Я сверялся с другими исходными кодами в...

В строке калькулятора показать весь процесс, а при нажатии на равно вывести только ответ
Добрый день, нужно в калькуляторе сделать так, чтобы при наборе цифры (5) и допустим мы хотим её умножить на (2). Как сделать так, чтобы в...

Реализация примитивного механизма аутентификации
Здравствуйте! Дали задание исправить ошибки в коде if(!isset($name)&amp;&amp;lisset($password)) // Посетитель должен ввести имя и пароль ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru