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

Открытие дочернего окна

15.01.2015, 20:11. Показов 2237. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасьте. Подскажите что я не так делаю. Хочу открыть окно по нажатию кнопки. Я открывал, просто создавая его по нажатию. А как его создать, но по нажатию кнопки только отобразить?


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
#include "windows.h"
#include "tchar.h"
 
HWND hButton;
HWND hChildWnd;
 
LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ChildWndProc(HWND hChildWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
TCHAR MainWndCls[] = _T("MWC");
TCHAR ChildWndCls[] = _T("CWC");
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lCmdLine, int nCmdShow)
{
 
    MSG msg;
    HWND hMainWnd;
 
    WNDCLASS WClass;
 
    WClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WClass.hCursor = LoadCursor(hInst, IDC_ARROW);
    WClass.hIcon = LoadIcon(hInst, IDI_WINLOGO);
    WClass.hInstance = hInst;
    WClass.cbClsExtra = 0;
    WClass.cbWndExtra = 0;
    WClass.lpszMenuName = NULL;
    WClass.lpfnWndProc = (WNDPROC)WndProc;
    WClass.lpszClassName = MainWndCls;
    WClass.lpszMenuName = NULL;
    WClass.style = 0;
 
    RegisterClass(&WClass);
 
    WNDCLASS WChildClass;
 
    WClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WClass.hCursor = LoadCursor(hInst, IDC_ARROW);
    WClass.hIcon = LoadIcon(hInst, IDI_WINLOGO);
    WClass.hInstance = hInst;
    WClass.cbClsExtra = 0;
    WClass.cbWndExtra = 0;
    WClass.lpszMenuName = NULL;
    WClass.lpfnWndProc = (WNDPROC)ChildWndProc;
    WClass.lpszClassName = ChildWndCls;
    WClass.lpszMenuName = NULL;
    WClass.style = 0;
 
    RegisterClass(&WChildClass);
 
    hMainWnd = CreateWindow(MainWndCls, _T("Main"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);
    ShowWindow(hMainWnd, nCmdShow);
    UpdateWindow(hMainWnd);
 
    hChildWnd = CreateWindow(ChildWndCls, _T("Child"), WS_OVERLAPPEDWINDOW | WS_CHILD, 0, 0, 300, 300, hMainWnd, NULL, hInst, NULL);
 
    hButton = CreateWindow(_T("BUTTON"), _T("OPEN"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 30, hMainWnd, HMENU(100), hInst, NULL);
 
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
 
LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 
    switch(message)
    {
    case WM_COMMAND:
        switch(wParam)
        {
        case 100:
            ShowWindow(hChildWnd, SW_NORMAL);
            UpdateWindow(hChildWnd);
            break;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default: 
        return DefWindowProc(hMainWnd, message, wParam, lParam);
    }
    return  0;
}
 
LRESULT CALLBACK ChildWndProc(HWND hChildWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hChildWnd, message, wParam, lParam);
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2015, 20:11
Ответы с готовыми решениями:

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое "убегает" от курсора мыши в пределах родительского окна. я создала главное окно,и дочернее,...

Закрытие дочернего окна приводит к закрытию основного окна
Суть задания "После нажатия левой кнопки мышки в области окна в левом углу окна создать временное окно размером в чверть основного окна....

Масштабирование дочернего окна
Всем доброе время суток Вот создаю дочернее окно, а как сделать так, что бы при изменение рабочеuо окна так же менялось и дочернее. ...

2
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
16.01.2015, 12:46
Цитата Сообщение от JAson13 Посмотреть сообщение
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
WNDCLASS WClass;
WClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
* * WClass.hCursor = LoadCursor(hInst, IDC_ARROW);
* * WClass.hIcon = LoadIcon(hInst, IDI_WINLOGO);
* * WClass.hInstance = hInst;
* * WClass.cbClsExtra = 0;
* * WClass.cbWndExtra = 0;
* * WClass.lpszMenuName = NULL;
* * WClass.lpfnWndProc = (WNDPROC)WndProc;
* * WClass.lpszClassName = MainWndCls;
* * WClass.lpszMenuName = NULL;
* * WClass.style = 0;
RegisterClass(&WClass);
WNDCLASS WChildClass;
WClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
* * WClass.hCursor = LoadCursor(hInst, IDC_ARROW);
* * WClass.hIcon = LoadIcon(hInst, IDI_WINLOGO);
* * WClass.hInstance = hInst;
* * WClass.cbClsExtra = 0;
* * WClass.cbWndExtra = 0;
* * WClass.lpszMenuName = NULL;
* * WClass.lpfnWndProc = (WNDPROC)ChildWndProc;
* * WClass.lpszClassName = ChildWndCls;
* * WClass.lpszMenuName = NULL;
* * WClass.style = 0;
RegisterClass(&WChildClass)
;
Посмотрите внимательно данный блок. Вы пытаетесь зарегистрировать класс дочернего окна, при этом не заполнив его данными. Вы просто меняете содержимое структуры для главного окна

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
    WNDCLASS WChildClass = WClass;
 
    WChildClass.lpfnWndProc = (WNDPROC)ChildWndProc;
    WChildClass.lpszClassName = ChildWndCls;
 
 
    RegisterClass(&WChildClass);
Добавлено через 4 минуты
Если хотите, чтобы новое(дочернее) окно открывалось не внутри родительского, то добавьте стили к классу окна
C++
1
2
3
4
5
 WNDCLASS WChildClass = WClass;
 
    WChildClass.lpfnWndProc = (WNDPROC)ChildWndProc;
    WChildClass.lpszClassName = ChildWndCls;
    [B]WChildClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;[/B]
А при создании окна уберите стиль WS_CHILD
2
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 36
17.01.2015, 01:23  [ТС]
Спасибо))невнимательность))разобрался уже)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2015, 01:23
Помогаю со студенческими работами здесь

Отображение дочернего окна
При нажатии лкм должно создаваться дочернее окно, но открывается только главное окно и не реагирует на клики. #include...

Закрытие дочернего окна
Привет всем !!! Есть программа на WinApi состоящая из родительского и дочернего окон (hWnd и hWnd1 ). Когда мы открываем это дочернее окно...

Не видно дочернего окна
LRESULT CALLBACK WindowProcedureWindowMain (HWND Window , ...

Закрытие дочернего окна
Есть главное окно, а в нем дочернее. Подскажите пожалуйста как сделать, чтобы главное окно не закрывалось при закрытии дочернего. Заранее...

Меню у дочернего окна
Всем привет.Помогите пожалуйста,у меня есть два окна:родительское и дочернее. При создании родительского окна я также создаю для него меню....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru