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

Диалоговые окна

13.10.2017, 20:52. Показов 2846. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста:
1). можно ли немодальное диалоговое окно отобразить на поверхности основного окна как, например, элемент управления? Т. е. чтобы оно отображалось именно на его поверхности?
2). можно ли при создании диалога, описанном в файле с ресурсами, установить его размер и координаты именно в момент создания, а не указывать их в самом файле ресурсов?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2017, 20:52
Ответы с готовыми решениями:

Диалоговые окна
Создать диалоговое окно, отображающее график функции. Функцию считывать из файла имя которого выбирается пользователем с помощью объекта...

Диалоговые окна
Я новичок в Win32 API, как впрочем и в С++. У меня уже который час не получается создать простейшее окно с кнопкой, которая на щелчок будет...

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

13
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
18.10.2017, 09:45
1) Можно, поставьте свойства WS_CHILD (WS_CHILDWINDOW), а все лишнее WS_CAPTION, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_SIZEBOX, WS_SYSMENU и текст самого заголовка окна уберите.
2) Можно функцией MoveWindow
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
18.10.2017, 10:28
William BJ, если не ошибаюсь, если главное окно не MDI, то даже если Вы прилепите второе окно на первое, при его фокусировании (прилепленного) у главного окна titlebar поменяет цвет как не фокусированный.
1
3 / 3 / 0
Регистрация: 11.10.2017
Сообщений: 12
18.10.2017, 17:05  [ТС]
GoshaM, Спасибо, попробовал с WS_CHILD + WS_BORDER, DS_CONTROL и WS_CLIPCHILDREN. Получилось)
Kukstyler, спасибо за предупреждение, не подумал об этом.

Добавлено через 7 минут
Kukstyler, DS_CONTROL, как я понял, используется именно для этого:
DS_CONTROL - Создает диалоговое окно, которое работает также как дочернее окно другого диалогового окна, очень похоже на страницу в окне свойств. Этот стиль позволяет пользователю перемешаться при помощи клавиши TAB среди органов управления окна дочернего блока диалога, использовать его клавиши - ускорители и так далее.
2
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
20.10.2017, 23:13
А как создать окно со стилем WS_EX_TOOLWINDOW ?
Сделал так :
C++
1
hWindow1 = CreateWindowEx(WS_EX_TOOLWINDOW, L"HELLO", L"HELLO", WS_OVERLAPPEDWINDOW|WS_CHILD, 0, 40, 300, 400, NULL, NULL, hInstance, NULL);
Ничего не отображается.
0
3 / 3 / 0
Регистрация: 11.10.2017
Сообщений: 12
20.10.2017, 23:39  [ТС]
oleg rus, попробуй добавить WS_VISIBLE
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
20.10.2017, 23:44
William BJ, Всё равно не чего не отображается. Может нужно заполнить класс WNDCLASSEX и использовать функцию RegisterClassEx?
0
3 / 3 / 0
Регистрация: 11.10.2017
Сообщений: 12
20.10.2017, 23:53  [ТС]
oleg rus, второй параметр мне не очень понятен. Он должен содержать идентификатор элемента или имя зарегистрированного окна. Попробуйте "dialog". Также стиль WS_CHILD, когда отсутствует дескриптор родительского окна.
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
20.10.2017, 23:58
William BJ, Нее всё по старому.
0
3 / 3 / 0
Регистрация: 11.10.2017
Сообщений: 12
21.10.2017, 00:01  [ТС]
oleg rus,
C++
1
2
3
4
5
6
HWND h = CreateWindowEx(
            0, WC_DIALOG,
            "HELLO", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
            0, 40, 300, 400,
            NULL, NULL, hThisInstance, NULL
        );
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
21.10.2017, 18:55
William BJ, Да так вроде работает,но мне надо чтобы окно было дочерним,я ему устанавливаю стиль WS_CHILD а оно почему-то не отображается.
0
2 / 2 / 0
Регистрация: 16.08.2019
Сообщений: 13
11.09.2019, 20:17
Создаю в файле ресурсов немодальное диалоговое окно. При щелчке мышки по родительскому окну, оно становиться активным(работает меню и т.д.), но диалоговое акно все равно отображается поверх родительского. Подскажите как сделать, что бы диалоговое окно скрывалось за родительским, когда используется родительское окно?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.09.2019, 20:30
Цитата Сообщение от AirL Посмотреть сообщение
Создаю в файле ресурсов немодальное диалоговое окно. При щелчке мышки по родительскому окну, оно становиться активным(работает меню и т.д.), но диалоговое акно все равно отображается поверх родительского. Подскажите как сделать, что бы диалоговое окно скрывалось за родительским, когда используется родительское окно?
Как ты вызываешь это окно, DialogBox? Покажи код.
0
2 / 2 / 0
Регистрация: 16.08.2019
Сообщений: 13
14.09.2019, 00:06
Вот код:
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
#include <Windows.h>
#include "resource.h"
 
 
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DialogFunc(HWND, UINT, WPARAM, LPARAM);   
                    
char szWinName[] = "МоеОкно";
HINSTANCE hInst;                                                            
HWND hDlg;
 
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) {
    HWND hwnd;
    MSG msg;
    hInst=hThisInst;                                                        
    WNDCLASS wc1;
    wc1.hInstance = hThisInst;
    wc1.lpszClassName = (LPCWSTR)szWinName;
    wc1.lpfnWndProc = WindowFunc;
    wc1.style = 0;
    wc1.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc1.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc1.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
    wc1.cbClsExtra = 0;
    wc1.cbWndExtra = 0;
    wc1.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    if (!RegisterClass(&wc1)) { return 0; }
    hwnd = CreateWindow((LPCWSTR)szWinName,
        L"Диалоговые окна",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        HWND_DESKTOP,
        NULL,
        hThisInst,
        NULL);
    ShowWindow(hwnd, nWinMode);
    UpdateWindow(hwnd);
    while (GetMessage(&msg, NULL, 0, 0)) {
        if(!IsDialogMessage(hDlg, &msg)) {                                  
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.wParam;
}
 
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch (message) {
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case ID_DIALOG1:
                    hDlg=CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, DialogFunc); 
                    break;
                case ID_DIALOG2:
                    MessageBox(hwnd, L"Этого диалога пока нет", L"", MB_OK);
                    break;
                case IDHELP:
                    MessageBox(hwnd, L"Помощь", L"Помощь", MB_OK);
                    break;
            }
            break;
        case WM_DESTROY: PostQuitMessage(0); break;
        default: return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
 
BOOL CALLBACK DialogFunc(HWND hdwnd, UINT message, WPARAM wParam, LPARAM lParam) { 
    switch(message) {
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDCANCEL:
                    DestroyWindow(hdwnd);                                   
                    break;
                case IDC_BUTTON1:
                    MessageBox(hdwnd, L"Выбран красный", L"Красный", MB_OK);
                    break;
                case IDC_BUTTON2:
                    MessageBox(hdwnd, L"Выбран зеленый", L"Зеленый", MB_OK);
                    break;
            }
            break;
        default: return FALSE;
    }
    return TRUE;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2019, 00:06
Помогаю со студенческими работами здесь

Диалоговые окна
Здравствуйте. У меня возник такой вопрос, как генерировать строку в Edit Control в завесимости от выбора Check Box. Допустим если я выбрал...

Диалоговые окна на WinAPI
Не могу создать диалоговое окно. Пример из книги ганеева не компилируется. Если несложно скиньте примерчик.

Не создаются диалоговые окна
Опять я со своей змейкой :) Хочу добавить диалоговые окна в программу. Вроде бы все делаю правильно: создал окно в ресурсах, написал...

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

Получить цвет пикселя из неактивного окна, перекрытого другими окнами окна
Можно ли получить цвет пикселя из неактивного или перекрытого другими окна? Какие есть способы? Погуглил, вроде говорят что можно сделать...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
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 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru