Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для nubak
1 / 1 / 0
Регистрация: 16.04.2013
Сообщений: 18

Проблемы с дочерним окном в MFC

18.04.2013, 09:07. Показов 1496. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема такого рода... на новом окне не работает ни один элемент управления - что делать? Что я пропустил при создании окна? Код вызова окна
C++
1
2
3
4
5
6
7
void CkursrabDlg::OnBnClickedButton2()
{
    UpdateData(true);
    CDialog okno2(IDD_OKNO2);
    okno2.DoModal();
    UpdateData(false);
}
Файлы класса нового окна
.h
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
#pragma once
#include "afxwin.h"
#include "afxcmn.h"
 
 
// диалоговое окно okno2
 
class okno2 : public CDialog
{
    DECLARE_DYNAMIC(okno2)
 
public:
    okno2(CWnd* pParent =NULL);   // стандартный конструктор
    virtual ~okno2();
    virtual BOOL OnInitDialog();
// Данные диалогового окна
    enum { IDD = IDD_OKNO2 };
 
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
 
    DECLARE_MESSAGE_MAP()
public:
    CComboBox ComBox;
    afx_msg void OnCbnDblclkCombo1();
    CString stroka;
    CListCtrl Table3;
    afx_msg void OnBnClickedButton1();
    CString title;
    CString author;
    int year;
};
.cpp
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
// okno2.cpp: файл реализации
//
 
#include "stdafx.h"
#include "kursrab.h"
#include "kursrabDlg.h"
#include "okno2.h"
#include "afxdialogex.h"
#include <fstream>
using namespace std;
 
// диалоговое окно okno2
 
IMPLEMENT_DYNAMIC(okno2, CDialog)
 
okno2::okno2(CWnd* pParent /*=NULL*/)
    : CDialog(okno2::IDD, pParent)
    , title(_T(""))
    , author(_T(""))
    , year(0)
{
 
}
 
okno2::~okno2()
{
}
 
void okno2::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_COMBO1, ComBox);
    DDX_Control(pDX, IDC_LIST1, Table3);
    DDX_Text(pDX, IDC_EDIT1, title);
    DDX_Text(pDX, IDC_EDIT2, author);
    DDX_Text(pDX, IDC_EDIT3, year);
}
 
 
BEGIN_MESSAGE_MAP(okno2, CDialog)
    ON_CBN_DBLCLK(IDC_COMBO1, &okno2::OnCbnDblclkCombo1)
    ON_BN_CLICKED(IDC_BUTTON1, &okno2::OnBnClickedButton1)
END_MESSAGE_MAP()
 
BOOL okno2::OnInitDialog()
{
    CDialog::OnInitDialog();
    char buff[100];
    CkursrabDlg data;
    int i;
    ifstream stream1;
    stream1.open("biblioteka.txt");
    do
    {
        stream1.getline(buff,300,'|');
        data.vect[i].title=buff;
        stream1.getline(buff,300,'|');
        data.vect[i].author=buff;
        stream1.getline(buff,300,'|');
        data.vect[i].god=atoi(buff);
        stream1.getline(buff,300,'|');
        data.vect[i].ganr=buff;
        stream1.getline(buff,300,'|');
        data.vect[i].annotation=buff;
    }
    while(!stream1.eof());
    stream1.close();
    Table3.InsertColumn(0,"Название книги",LVCFMT_LEFT,-1,0);
    Table3.InsertColumn(0,"Автор",LVCFMT_LEFT,-1,0);
    Table3.InsertColumn(0,"Год издания",LVCFMT_LEFT,-1,0);
    Table3.InsertColumn(0,"Жанр",LVCFMT_LEFT,-1,0);
return TRUE;
}
// обработчики сообщений okno2
 
void okno2::OnCbnDblclkCombo1()
{
    UpdateData(true);
    ComBox.GetLBText(ComBox.GetCurSel(),stroka);
    UpdateData(false);
    // TODO: добавьте свой код обработчика уведомлений
}
 
 
void okno2::OnBnClickedButton1()
{
    UpdateData(true);
    CkursrabDlg data;
    int n=0;
    int i=0;
    do
    {
        if(data.vect[i].title.Compare(title)==0&&data.vect[i].author.Compare(author)==0&&data.vect[i].god==year&&data.vect[i].ganr.Compare(stroka)==0)
        {
            int Index;
            char buff[100];
            Index = Table3.InsertItem(LVIF_TEXT, n, "", 0, 0, 0, NULL);
            Table3.SetItem(Index, 1, LVIF_TEXT, data.vect[i].title, 0, 0, 0, NULL);
            Table3.SetItem(Index, 2, LVIF_TEXT, data.vect[i].author, 0, 0, 0, NULL);
            itoa(data.vect[i].god,buff,10);
            Table3.SetItem(Index, 3, LVIF_TEXT,buff, 0, 0, 0, NULL);
            Table3.SetItem(Index, 4, LVIF_TEXT, data.vect[i].ganr, 0, 0, 0, NULL);
            n++;
        }
        i++;
    }
    while(i!=data.vect.size());
    i=0;
    do
    {
        if(data.vect[i].title.Compare(title)==0||data.vect[i].author.Compare(author)==0||data.vect[i].god==year||data.vect[i].ganr.Compare(stroka)==0)
        {
            int Index;
            char buff[100];
            Index = Table3.InsertItem(LVIF_TEXT, n, "", 0, 0, 0, NULL);
            Table3.SetItem(Index, 1, LVIF_TEXT, data.vect[i].title, 0, 0, 0, NULL);
            Table3.SetItem(Index, 2, LVIF_TEXT, data.vect[i].author, 0, 0, 0, NULL);
            itoa(data.vect[i].god,buff,10);
            Table3.SetItem(Index, 3, LVIF_TEXT, buff, 0, 0, 0, NULL);
            Table3.SetItem(Index, 4, LVIF_TEXT, data.vect[i].ganr, 0, 0, 0, NULL);
            n++;
        }
        i++;
    }
    while(i!=data.vect.size());
    UpdateData(false);
    // TODO: добавьте свой код обработчика уведомлений
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2013, 09:07
Ответы с готовыми решениями:

Работа с дочерним окном программы
Необходимо написать прогу, которая запускает другую программу (exe-файл) на выполнение. При этом запускающая программа будет работать с...

Работа с модальным окном MFC
Скажите,пожалуйста, можно ли как-то организовать запись данных из модального окна в текстовый файл? Есть главное окно, есть...

Проблемы с отрисовкой в MFC
Здравствуйте. Столкнулся с проблемой при разработке графического редактора (MFC MDI), а именно, при большом кол-ве графических...

7
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 5
09.05.2013, 00:47
Возможно могу помочь с решением.
Я решил следующим образом:
Добавляете в проект новій класс на основе CDialog и ресурсом Вашего второго диалога. Добавляете его в файлы ??????Dlg.cpp ???????Dlg.h основного проекта. После этого создайте какую-то кнопку и привяжите действие.
Допустим создали класс MyDlg, а основной клас(или как он там называется) CMy777Dlg.
На основном диаоговом окне я создал объект editbox и назначил ему переменную m_string. На втором окне создал тоже editbox и назначил ему переменную m_string1 :

void CMy777Dlg::OnButton1()
{
UpdateData(TRUE);
MyDlg dlg;
dlg.m_string1=m_string;
dlg.DoModal();
}
если чего пишите пришлю пример
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
09.05.2013, 06:49
Цитата Сообщение от nubak Посмотреть сообщение
на новом окне не работает ни один элемент управления - что делать?
Цитата Сообщение от nubak Посмотреть сообщение
BEGIN_MESSAGE_MAP(okno2, CDialog)
* * ON_CBN_DBLCLK(IDC_COMBO1, &okno2::OnCbnDblclkCombo1)
* * ON_BN_CLICKED(IDC_BUTTON1, &okno2::OnBnClickedButton1)
END_MESSAGE_MAP()
а что должно работать?
какие события ты решил обрабатывать ?
прочитай про сообщения и карту сообщений
по крайней мере не обрабатывают нажатие и двойное нажатие для элементов управления
0
 Аватар для nubak
1 / 1 / 0
Регистрация: 16.04.2013
Сообщений: 18
09.05.2013, 14:16  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
а что должно работать?
какие события ты решил обрабатывать ?
прочитай про сообщения и карту сообщений
по крайней мере не обрабатывают нажатие и двойное нажатие для элементов управления
Не важно - не работает ни один элемент: ни кнопки ни радиокнопки ничего. какие бы действия я к ним не привязывал (даже элементарный MessageBox) ничего не пашет.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
09.05.2013, 18:37
Цитата Сообщение от nubak Посмотреть сообщение
Не важно - не работает ни один элемент: ни кнопки ни радиокнопки ничего. какие бы действия я к ним не привязывал (даже элементарный MessageBox) ничего не пашет.
А вот это что?????
Цитата Сообщение от nubak Посмотреть сообщение
CDialog okno2(IDD_OKNO2);
Ты наверно думаешь что вызываешь свой созданный диалог? Свой класс?
Глубоко ошибешься ты создал объект класса CDialog с именем okno2
а CDialog о твоих обработчиках и понятия не имеет

вот так вызывают диалог
C++
1
2
okno2 dlg;
dlg.DoModal();
0
 Аватар для nubak
1 / 1 / 0
Регистрация: 16.04.2013
Сообщений: 18
09.05.2013, 19:54  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
А вот это что?????

Ты наверно думаешь что вызываешь свой созданный диалог? Свой класс?
Глубоко ошибешься ты создал объект класса CDialog с именем okno2
а CDialog о твоих обработчиках и понятия не имеет

вот так вызывают диалог
C++
1
2
okno2 dlg;
dlg.DoModal();
я знаю!!! Иначе бы я не вызвал новое дочернее окно!!!! Но после вызова ничего не происходит!!!

Добавлено через 47 секунд
Цитата Сообщение от nubak Посмотреть сообщение
CDialog okno2(IDD_OKNO2);
* * okno2.DoModal();
Вот это что?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
09.05.2013, 22:21
Цитата Сообщение от nubak Посмотреть сообщение
я знаю!!!
ты цитировать научишься?
что ты знаешь?


Цитата Сообщение от nubak Посмотреть сообщение
Иначе бы я не вызвал новое дочернее окно!!!!
т.е у тебя вот так не вызывается?????

Цитата Сообщение от ValeryS Посмотреть сообщение
okno2 dlg;
dlg.DoModal();
Цитата Сообщение от nubak Посмотреть сообщение
Вот это что?
еще раз повторяю
это создание объекта okno2 класса CDialog
а никак не создание объекта твоего класса
а то что имя объекта совпадает с именем класса ничего не значит
твоих функций никто не видит (потому что они не компилируются)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.05.2013, 15:20
nubak, вот готовые
Как получить доступ к функциям главного диалога из немодального?

Edit Control в модальном окне
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2013, 15:20
Помогаю со студенческими работами здесь

Проблема с дочерним окном
Важный вопрос у меня в этой книге использ. дочернее окно! но когда я установила свойсво IsMdiContainer и для пукнта меню обратобала...

Нужно встроить дочерним окном другое приложение или модуль.
Говорят, что .net полностью заменила COM и всю её функциональность... У меня тут простая задача - есть окно (типа MainFrame), и в него...

Каким образом можно открыть приложение в форме так, чтобы оно являлось дочерним окном?
Добрый день. Каким образом можно открыть приложение в форме так, чтобы оно являлось дочерним окном?

Возможно ли в WPF App сделать MainWindow дочерним окном и открыть в его рамках другое окно?
Возможно ли в WPF App сделать MainWindow дочерним окном и открыть в его рамках другое окно (Window1)? Не нашёл в WPF параметра...

Проблемы с применением стилей к дочерним страницам
не пойму как решить проблему, у меня имеется MasterPage и подчиненная ей страница которая находится в отдельной папке проекта...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru