С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/86: Рейтинг темы: голосов - 86, средняя оценка - 4.70
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101

Работа с MFC: Как создать дочерние окна?

27.07.2011, 22:11. Показов 16915. Ответов 95
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некоторые вопросы по этой библиотеке..... 1 Как создать дочерние окна ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2011, 22:11
Ответы с готовыми решениями:

Создать страницу, с помощью которой пользователь сможет произвольно создавать и закрывать дочерние окна
Ребят, доброй ночи. Очень прошу помощи. Нужно создать скрипт, а я в этом деле тугодум, т.к. ничего не обьясняли. Спонтанно, это надо...

Работа в MFC. Обновление окна.
У меня в функции OnDraw() отрисовывается куб. По нажатию мыши нужно чтобы этот куб стирался и рисовался новый куб с другими сторонами. С...

Как создавать дочерние окна?
Вот у меня окно например форм1, нажимаю на буттон и в форм1 появляется форм2 (появление должно быть незаметным). могу привести пример,...

95
 Аватар для Melzas
38 / 38 / 6
Регистрация: 20.07.2011
Сообщений: 88
27.07.2011, 22:25
http://msdn.microsoft.com/en-u... s.80).aspx
Обратите внимание на параметр
C++
1
CWnd* pParentWnd
0
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
27.07.2011, 22:27  [ТС]
можно на одном конкретном примере если не трудно?!
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
27.07.2011, 22:30
сайт первые шаги http://www.firststeps.ru/
куча примеров все по шагам
и не только MFC
0
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
27.07.2011, 22:34  [ТС]
адеюсь поможет, а WINAPI есть??
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
27.07.2011, 22:44
Цитата Сообщение от ДинисламХХХ Посмотреть сообщение
а WINAPI есть??
есть
зайди посмотри
единственное неудобство примеры писаны на VS 6
0
 Аватар для Melzas
38 / 38 / 6
Регистрация: 20.07.2011
Сообщений: 88
27.07.2011, 22:51
Вот простой пример:
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
#include <afxwin.h>
class App : public CWinApp
{
public:
    App();
    int InitInstance();
};
class ParentWindow : public CFrameWnd
{
public:
    ParentWindow();
};
class ChildWindow : public CWnd
{
public:
    ChildWindow();
};
App::App()
{
}
int App::InitInstance()
{
    m_pMainWnd=new ParentWindow;
    ASSERT(m_pMainWnd);
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}
ChildWindow::ChildWindow()
{
}
ParentWindow::ParentWindow()
{
    Create(NULL,L"Parent",WS_OVERLAPPEDWINDOW);
    ChildWindow* Child=new ChildWindow;
    Child->Create(NULL,L"Child",WS_OVERLAPPEDWINDOW|WS_VISIBLE,CRect(0,0,400,100),this,NULL);
}
App theApp;
Комментарии, надеюсь, не нужны. Все прозрачно.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
27.07.2011, 23:11
Цитата Сообщение от Melzas Посмотреть сообщение
Комментарии, надеюсь, не нужны. Все прозрачно.
Ага !!! если учесть что он классы не знает
какой за что отвечает

Добавлено через 2 минуты
попробуй объяснить человеку первый раз увидевшему MFC
где у него WinMain

Добавлено через 6 минут
Цитата Сообщение от Melzas Посмотреть сообщение
ParentWindow::ParentWindow()
{
Create(NULL,L"Parent",WS_OVERLAPPEDWINDO W);
А это вообще гениально микрософт специально разделил конструкторы и создание (а ты их вместе впихал)потому что конструктор ничего не возвращает
как узнать код ошибки почему окно не создалось
что будешь делать если окно по какой то причине не создалось???
0
 Аватар для Melzas
38 / 38 / 6
Регистрация: 20.07.2011
Сообщений: 88
27.07.2011, 23:12
Цитата Сообщение от ValeryS Посмотреть сообщение
Ага !!! если учесть что он классы не знает
какой за что отвечает
Странно, что у человека, вообще не знающего MFC первым вопросом является "Как создать дочерние окна?". Я исходя из этого вопроса предположил, что ТС знает как создавать хотя бы простое окно на MFC.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
27.07.2011, 23:24
Цитата Сообщение от Melzas Посмотреть сообщение
class ChildWindow : public CWnd
{
public:
ChildWindow();
};
и зачем это наследование ???
все от базового класса
почему вместо
C++
1
ChildWindow* Child=new ChildWindow;
не написать
C++
1
CWnd* Child=new CWnd;
C++
1
2
3
4
5
6
ParentWindow::ParentWindow()
{
        Create(NULL,L"Parent",WS_OVERLAPPEDWINDOW);
        ChildWindow* Child=new ChildWindow;
        Child->Create(NULL,L"Child",WS_OVERLAPPEDWINDOW|WS_VISIBLE,CRect(0,0,400,100),this,NULL);
}
Утечка памяти !!!!
где будет указатель когда выйдем из конструктора???
как будем обращаться к дочернему окну??
где delete парная new???
почему не сделать членом класса?

Цитата Сообщение от Melzas Посмотреть сообщение
Комментарии, надеюсь, не нужны. Все прозрачно.
как видишь не все
куча вопросов

Добавлено через 4 минуты
Цитата Сообщение от Melzas Посмотреть сообщение
Child->Create(NULL,L"Child",WS_OVERLAPPEDWINDO W|WS_VISIBLE,CRect(0,0,400,100),this,NUL L);
окна производные от CWnd обязательно требуют WS_CHILD
(за что я их не люблю)
0
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
27.07.2011, 23:25  [ТС]
единственное что умею так это работать пока что с формами... но мне интересно все эт по этому и вопросы "такие"((
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
27.07.2011, 23:28
Цитата Сообщение от ДинисламХХХ Посмотреть сообщение
единственное что умею так это работать пока что с формами...
в смысле CLI/CLR ???
это совершенно другое направление совершенствуйся в нем
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.07.2011, 12:57
Вызов окон в MFC может осуществляться в двух режимах - Модальном и немодальном. Режим вызова отвечает за возможности дочернего окошка. В немодальном режиме возможно параллельное использование родительского и дочернего окна. Для этого дочернее окошко должно иметь стиль Overlaped (привожу скриншот как выставить этот стиль). Стиль окна это параметр который отвечает за его форму и функциональные возможности, для избежания каши здесть о стиле постить не буду.
В Модальном режиме доступ к родительскому окну закрыт дочерним и получить фокус на родительское окно можем лишь только после завершения работы с дочерним. Я накидал небольшой проектик для пояснительных целей. Ещё немного замечаний по коду

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
form frm, *pfrm;//Объявление объекта класса form 
 
void CWindowDlg::OnButton1() 
{
    // Modal Dlg
    frm.m_stat1 = "Window in modal mode";
    if(frm.DoModal() == IDOK)
    {
        //Здесь можешь обрабатывать действия
        //после нажатия ОК в модальном окне
    }
}
 
void CWindowDlg::OnButton2() 
{
    // No Modal Dlg
    pfrm = new form();
    pfrm->Create(IDD_FORM_DIALOG,NULL);
    pfrm->m_stat1 = "Window in nomodal mode";
    pfrm->ShowWindow(SW_SHOW);
}
Для создания дочернего окна важны эти строки
C++
1
2
pfrm = new form();
pfrm->Create(IDD_FORM_DIALOG,NULL);
При этом параметр DD_FORM_DIALOG отвечает за номер дочернего окна в ресурсах проекта (он составной IDD_ИмяОкна_DIALOG). Вобще MFC специально разработан для избавления мучений с прорисовкой окна и автоматическим внедрением базовых функций окна. Для начала лучше MFC осваивать. Примеры указанные выше относятся к API, к которому лучше браться набив руку в MFC. АПИ лучше МФЦ в том плане что код выходит более компактен и размер экзешника меньше, но когда в окне необходимо задействовать кучу контролов я выбираю МФЦ, что избавляет от ненужного гемороя с прорисовкой контролов и окна, которое я сразу вижу в режиме дизайнера. Использование МФЦ это сугубо моё предпочтение, так что если кому то нравиться апи то юзайте его
Миниатюры
Работа с MFC: Как создать дочерние окна?   Работа с MFC: Как создать дочерние окна?  
Вложения
Тип файла: rar window.rar (10.1 Кб, 50 просмотров)
Тип файла: rar window.exe.rar (3.9 Кб, 24 просмотров)
1
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
29.07.2011, 16:25  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
в смысле CLI/CLR ???
это совершенно другое направление совершенствуйся в нем
ну в том плане, что могу просто написать в обработчике (в сгенерированном автоматически) нужный код, к примеру отзыв на нажатие той или иной кнопки на форме.... МFC мне кажется легче , но АПИ интересней...

Добавлено через 23 часа 11 минут
вот еще вопрос. как из Edit Box текст записать в массив CString , и вывести ее в другом Edit Boxe??
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.07.2011, 16:34
C++
1
2
3
4
UpdateData(true);////Сбор данных в контолы окна
CString str = m_edit1;
m_edit2 = str;
UpdateData(false);//Передача данных в контолы окна
Если нужен именно массив символов из CString то его получаем так
C++
1
char * mass = str.GetBuffer(str.GetLength());
2
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
29.07.2011, 16:43  [ТС]
C++
1
CString str[m]
так не пойдет?? ну тип ка обычно??
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
29.07.2011, 16:52
Цитата Сообщение от ДинисламХХХ Посмотреть сообщение
CString str[m]
этим ты объявил массив строк
0
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
29.07.2011, 17:09  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
этим ты объявил массив строк
так мне оно нужно

Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
4
UpdateData(true);////Сбор данных в контолы окна
CString str = m_edit1;
m_edit2 = str;
UpdateData(false);//Передача данных в контолы окна
Если нужен именно массив символов из CString то его получаем так
C++
1
char * mass = str.GetBuffer(str.GetLength());

я делал так
int i=0;
CString Str[m];
C++
1
2
3
4
5
6
7
8
void CmyDlg::OnButton1()
{
UpdateData(TRUE);
GetDlgItemText(IDC_XXX,m_edit1);
Str[i]=m_edit1;
i++;
UpdateData(FALSE);
}
но ток почему то она не работала

Добавлено через 5 минут
вывод в другой Edit
C++
1
2
3
4
5
6
7
void CmyDlg::OnButton2()
{
UpdateData(TRUE);
m_edit2=str[2];
SetDlgItemText(IDC_XXX2,m_edit2);
i++;
}
а в чем проблема я не понимаю
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.07.2011, 17:26
Цитата Сообщение от ДинисламХХХ Посмотреть сообщение
void CmyDlg::OnButton1()
{
UpdateData(TRUE);
GetDlgItemText(IDC_XXX,m_edit1);
Str[i]=m_edit1;
i++;
UpdateData(FALSE);
}
Здесь цикла нет!
0
6 / 6 / 1
Регистрация: 29.11.2010
Сообщений: 101
29.07.2011, 19:49  [ТС]
как это, ведь при каждом нажатии на кнопку I увеличивается.... я так на Buildere 6 делал, работала , а на MVS 2010 чет не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2011, 19:49
Помогаю со студенческими работами здесь

Как правильно создавать дочерние окна?
Всем доброе время суток. Может кто подсказать как правильно создавать дочерние окна. Например есть окно Form1 и при нажатии на кнопку нужно...

Как создавать дочерние окна (окно в окне)
Здравствуйте! Подскажите пожалуйста, как можно в WPF создавать дочерние окна? т.е. Есть одно окно mainWindow, и по кнопке можно вызвать...

Как получить все дочерние окна процесса?
Получаю все процессы, нахожу нужный, но мне еще нужны вложенные окна типа Ebit и им подобным, полный список, как их можно получить? Через...

Как получить все дочерние окна процесса?
Получаю все процессы, нахожу нужный, но мне еще нужны вложенные окна типа Ebit и им подобным, полный список, как их можно получить? Через...

Как передать значение из родительского окна в дочерние?
var newWin = window.open('about:blank', 'example', 'width=600,height=400'); // создать div в документе нового окна var div =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru