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

Обработка сообщений от нескольких дочерних окон

29.09.2015, 09:45. Показов 2173. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Имеется программа, в главном окне 3 кнопки, по нажатию открывается одно из 3х дочерних окон. Нужно, чтобы каждое окно выполняло разные функции, в моем случае, рисовались 3 разные геометрические фигуры. Не могу понять, как обращаться к нужному окну, может выполнять проверку на активное окно или как? Помогите, пожалуйста разобраться
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
// Win32Project10.cpp: определяет точку входа для приложения.
//
 
#include "stdafx.h"
#include "Win32Project10.h"
#include <windows.h>
#define _USE_MATH_DEFINES
#include <cmath>
#define CIRCLE_CX 150.0
#define CIRCLE_CY 150.0
#define CIRCLE_BIG_RADIUS 100.0
#define CIRCLE_SMALL_RADIUS 40.0
#define ANGLE_COUNT 5
#define ID_BUTTON1 100
#define ID_BUTTON2 200
#define ID_BUTTON3 300
using namespace std;
 
// --- Описание функции главного окна
LRESULT CALLBACK main_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);//(СALLBACK - паскалевское соглашение о способе передаче параметров)
LRESULT CALLBACK popup_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);//(СALLBACK - паскалевское соглашение о способе передаче параметров)
LRESULT CALLBACK child_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);//(СALLBACK - паскалевское соглашение о способе передаче параметров)
HINSTANCE  hInst;
// --- Глобальные переменные
 
 
TCHAR main_ClassName[] = L"MainWindows";      // Название класса окна
TCHAR child_ClassName[] = L"ChildWindows";
 
TCHAR main_app_name[] = L"OVERLAPPEDWINDOW";      // Название класса окна
TCHAR popup_app_name[] = L"POPUPWINDOW";
TCHAR child_app_name[] = L"CHILDWINDOW";
 
// --- Функция WinMain
int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    WNDCLASS main_wc, popup_wc, child_wc;
 
    HWND main_hWnd;
    MSG msg;
    memset(&main_wc, 0, sizeof(main_wc));
    memset(&popup_wc, 0, sizeof(popup_wc));
    memset(&child_wc, 0, sizeof(child_wc));
 
    main_wc.lpszClassName = main_ClassName;
    main_wc.lpfnWndProc = (WNDPROC)main_WndProc;
    main_wc.style = CS_HREDRAW | CS_VREDRAW;//стили класса окна Перерисовывает все окно , если регулятор движения или размер изменения высоты клиентской области.
    main_wc.hInstance = hInstance;
    main_wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    main_wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    main_wc.hbrBackground = CreateSolidBrush(RGB(20, 150, 1000));
    main_wc.lpszMenuName = NULL;
    main_wc.cbClsExtra = 0;
    main_wc.cbWndExtra = 0;
    RegisterClass(&main_wc);
 
    child_wc.lpszClassName = child_ClassName;
    child_wc.lpfnWndProc = (WNDPROC)child_WndProc;
    child_wc.style = CS_HREDRAW | CS_VREDRAW;
    child_wc.hInstance = hInstance;
    child_wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    child_wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    child_wc.hbrBackground = CreateSolidBrush(RGB(0, 255, 0));
    child_wc.lpszMenuName = NULL;
    child_wc.cbClsExtra = 0;
    child_wc.cbWndExtra = 0;
    RegisterClass(&child_wc);
    //WS_OVERLAPPEDWINDOW^WS_MINIMIZEBOX^WS_MAXIMIZEBOX
    main_hWnd = CreateWindow(
        main_ClassName,             // Имя класса окон
        main_app_name,          // Заголовок окна 
        WS_OVERLAPPEDWINDOW |WS_CLIPCHILDREN,        // Стиль окна  
        CW_USEDEFAULT,          // X-координаты 
        CW_USEDEFAULT,          // Y-координаты 
        CW_USEDEFAULT,          // Ширина окна
        CW_USEDEFAULT,          // Высота окна
        NULL,           // Дескриптор окна-родителя
        NULL,           // Дескриптор меню окна
        hInstance,      // Дескриптор экземпляра приложения
        NULL);      // Дополнительная информация
    if (main_hWnd == 0)
    {
        return FALSE;
    }
    ShowWindow(main_hWnd, nCmdShow);
    UpdateWindow(main_hWnd);
 
 
    while (GetMessage(&msg, NULL, 0, 0)) //(NULL - дикриптор окна из которого принимать сообщения) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam; // возвращает значение последнего обработанного сообщения
}
 
// --- Функция окна
LRESULT CALLBACK main_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;  
    
    HWND hButton, hButton1, hButton2;
    switch (msg)
    {
    case WM_CREATE:
        hButton = CreateWindow(L"button", NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_PUSHBUTTON, 400, 12, 200, 150, hWnd, (HMENU)ID_BUTTON1, hInst, NULL);
        hButton1 = CreateWindow(L"button", NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP, 400, 162, 200, 150, hWnd, (HMENU)ID_BUTTON2, hInst, NULL);
        hButton2 = CreateWindow(L"button", NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP, 400, 312, 200, 150, hWnd, (HMENU)ID_BUTTON3, hInst, NULL);
    
    case WM_COMMAND:
        wmId = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        if (LOWORD(wParam) == ID_BUTTON1)
        {
            HWND child_hWnd = CreateWindow(child_ClassName, _T("Child1"), WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE| WS_CLIPSIBLINGS, 20, 30, 300, 300, hWnd, NULL, hInst, NULL);
            ShowWindow(child_hWnd, SW_NORMAL);
            UpdateWindow(child_hWnd);
            break;
        }
        if (LOWORD(wParam) == ID_BUTTON2)
        {
            HWND child_hWnd2 = CreateWindow(child_ClassName, _T("Child2"), WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 700, 200, 400, 400, hWnd, NULL, hInst, NULL);
            ShowWindow(child_hWnd2, SW_NORMAL);
            UpdateWindow(child_hWnd2);
            break;
        }
        if (LOWORD(wParam) == ID_BUTTON3)
        {
            HWND child_hWnd3 = CreateWindow(child_ClassName, _T("Child3"), WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 400, 300, 400, 400, hWnd, NULL, hInst, NULL);
            ShowWindow(child_hWnd3, SW_NORMAL);
            UpdateWindow(child_hWnd3);
            break;
        }
        switch (wParam)
        {
 
    
        }
    
 
        case WM_PAINT:
        {
 
                        
        }; break;
 
 
        case WM_DESTROY:
        {
                           PostQuitMessage(0);
        }; break;
 
        
        
        return 0l;
    }
 
LRESULT CALLBACK child_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    
 
        
 
    case WM_DESTROY:
    {
                       PostQuitMessage(0);
    }; break;
 
    case WM_MOVE:
    {
                    InvalidateRect(hWnd, NULL, TRUE); UpdateWindow(hWnd);
    }break;
 
    default: return DefWindowProc(hWnd, msg, wParam, lParam); //реализует поведение по умолчанию типичного окна верхнего уровня. 
    }
    return 0l;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2015, 09:45
Ответы с готовыми решениями:

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

Получение сообщений от дочерних окон
Есть класс создающий дочернее окошко внутри основного окна. Все сообщения внутри Proc- дочернего окна работают но когда посылаю в...

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

1
39 / 39 / 11
Регистрация: 05.09.2015
Сообщений: 262
29.09.2015, 12:54
Что значит "паскалевское соглашение"? Сотрите эти жуткие комментарии. Да и вообще НЕ пишите комментарии!

Зачем "обращаться к окну"? Дочернее окно должно просто рисовать. Вопрос в том как сделать чтоб три окна одного класса рисовали разное...
Ну вот у вас имена окон отличаются - Child1/Child2/Child3 - можно к этому привязаться. Или использовать поле GWL_USERDATA.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2015, 12:54
Помогаю со студенческими работами здесь

Обработка сообщений двух окон
Всем привет! Я разрабатываю небольшой физ эмулятор в котором требуется создать два окна. Некий интерфейс пользователя куда я буду вносить...

Минимизация дочерних окон
Здравствуйте! Есть задание: Написать приложение, обладающее следующей функциональностью: - при последовательном нажатии ...

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

Изменение размера дочерних окон
Имеется главное окно с тремя дочерними, конкретнее все 3 дочерних окна это контролы типа ListView, Tab control и обычное дочернее окно для...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru