нифига не понял по Ddx (передача данных)
Создан класс диалогового окна. Описание функций класса следующее:
void DlgINFO::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_edit);
}
void DlgINFO::SetEditStr(CString csEdit)
{
m_edit=csEdit;
}
CString DlgINFO::GetEditStr()
{
return m_edit;
}
Описание на клик мыши (в модуле View.cpp):
DlgINFO dlg;
dlg.SetEditStr("Hello DDX");
dlg.GetEditStr();
Так вот функция
void DlgINFO::DoDataExchange(CDataExchange* pDX)
вообще не срабатывает.
Спасибо.
void DlgINFO::DoDataExchange(CDataExchange* pDX)
вообще не срабатывает.
Спасибо.
Сперва нужно вызвать ф-ю
UpdateData(TRUE); // Чтение в m_edit
или
UpdateData(FALSE); // Вывод m_edit в CEdit
Сперва нужно вызвать ф-ю
UpdateData(TRUE); // Чтение в m_edit
или
UpdateData(FALSE); // Вывод m_edit в CEdit
Куда надо вставить этот код. Нельзя ли по подробнее. Я пробовал на клик мыши эти функции поставить - результат: никакого результата. Не получилось короче... Но все равно спасибо.
{
CDialog:oDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_edit);
}
void DlgINFO::SetEditStr(CString csEdit)
{
m_edit=csEdit;
Update(FALSE);
}
CString DlgINFO::GetEditStr()
{
Update(TRUE);
return m_edit;
}
{
CDialog:oDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_edit);
}
void DlgINFO::SetEditStr(CString csEdit)
{
m_edit=csEdit;
Update(FALSE);
}
CString DlgINFO::GetEditStr()
{
Update(TRUE);
return m_edit;
}
Наверное не Update(...), а UpdateData(...). При этом все компилиться и запускается, но при вызове данных функций программа предлагает завершить приложение, что делать?
Наверное не Update(...), а UpdateData(...). При этом все компилиться и запускается, но при вызове данных функций программа предлагает завершить приложение, что делать?
Так никто и не ответил. Ну ведь у кого-то должны быть предположения. Мое диалоговое окно причалено к главному в виде объекта DialogBar. Может в этом проблема. И еще как мне кажется ошибка возникает из-за того, что нужно окно сделать модальным, но если его сделать таковым, то все приложение становиться не доступным и приходится закрывать его через диспетчер задач.
Так никто и не ответил. Ну ведь у кого-то должны быть предположения. Мое диалоговое окно причалено к главному в виде объекта DialogBar. Может в этом проблема. И еще как мне кажется ошибка возникает из-за того, что нужно окно сделать модальным, но если его сделать таковым, то все приложение становиться не доступным и приходится закрывать его через диспетчер задач.
Попробую ответить.
1. Очевидно, Update() — опечатка. Должно быть UpdateData().
2. Модальное окно в вашей задаче — плохая идея. На то оно и модальное, чтобы все функции приложения ждали его завершения. Делайте немодальное. Однако, к вашему первоначальному вопросу это отношения не имеет.
Так никто и не ответил. Ну ведь у кого-то должны быть предположения. Мое диалоговое окно причалено к главному в виде объекта DialogBar. Может в этом проблема. И еще как мне кажется ошибка возникает из-за того, что нужно окно сделать модальным, но если его сделать таковым, то все приложение становиться не доступным и приходится закрывать его через диспетчер задач.
На твой вопрос ответили. Даже вместе с кодом. Конечно нужно UpdateData(). И можешь делать окно модальным, немодальным, это в данном случае никакой роли не играет. Тебе всего навсего в свой код нужно перекопировать 2, повторяю 2 команды.
На твой вопрос ответили. Даже вместе с кодом. Конечно нужно UpdateData(). И можешь делать окно модальным, немодальным, это в данном случае никакой роли не играет. Тебе всего навсего в свой код нужно перекопировать 2, повторяю 2 команды.
Это я все понял. Спасибо за ответы. Но вопрос был еще другой: После копирования один в один UpdateData(...) программа при вызове данных функций обглючивается и предлагает либо отладку либо завершение. Пишет:
Debug Assertion Failed!
File: wincore.cpp
Line: 3095
Прервать Повтор Пропустить
Все Includы прописаны. Че ему еще надо?
Только этого я понять не могу.
Это я все понял. Спасибо за ответы. Но вопрос был еще другой: После копирования один в один UpdateData(...) программа при вызове данных функций обглючивается и предлагает либо отладку либо завершение. Пишет:
Debug Assertion Failed!
File: wincore.cpp
Line: 3095
Прервать Повтор Пропустить
Все Includы прописаны. Че ему еще надо?
Только этого я понять не могу.
Жмите "Повтор" и начинайте лазить по стеку, проверять значения переменных и т.д., чтобы выяснить причину ошибки...
Параллельно читайте про DialogBar. Может быть, поймёте, что ему ещё надо.
Это я все понял. Спасибо за ответы. Но вопрос был еще другой: После копирования один в один UpdateData(...) программа при вызове данных функций обглючивается и предлагает либо отладку либо завершение. Пишет:
Debug Assertion Failed!
File: wincore.cpp
Line: 3095
Прервать Повтор Пропустить
Все Includы прописаны. Че ему еще надо?
Только этого я понять не могу.
Ты вызываешь UpdateData ПЕРЕД DoModal(). DoModal() сама вызовет UpdateData(FALSE).
Ты вызываешь UpdateData ПЕРЕД DoModal(). DoModal() сама вызовет UpdateData(FALSE).
Там DoModal, я вообще не использую. Я исходник выкладываю. Если не трудно взгляните плз... Думаю, что ошибка где-то на поверхности.
Проект открыть в VS6, не можно, trace.dsw пуст. Но массив n_Par нигде не инициализирован. В CMainFrame::Create нужно бы его обнулить.
странно, у меня все открывается. Но float m_Par[9] объявлен в MainFrm.cpp. Это никак не относится к моему вопросу (я так думаю). Блин... что делать. Может надо переопределить метод Create для диалога, таким образом, чтобы он создавался именно немодальным? Если да, то какой код будет в переопределении?
При вызове функции в отладке прога вываливается на строку
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?
которая находится в описании функции
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
в файле wincore.cpp
что делать?
странно, у меня все открывается...
Мой VS.NET тоже не может открыть ваш проект. Пишет "file corrupted". Прицепите файл снова.
Кстати, *.aps, *.ncb, *.plg посылать не надо. Они не только место занимают, но даже и мешают иногда (редко) при переносе проекта с места на место. В большинстве случаев *.opt тоже не нужен.
Мой VS.NET тоже не может открыть ваш проект. Пишет "file corrupted". Прицепите файл снова.
Кстати, *.aps, *.ncb, *.plg посылать не надо. Они не только место занимают, но даже и мешают иногда (редко) при переносе проекта с места на место. В большинстве случаев *.opt тоже не нужен.
Спасибо за проявленный интерес к моему вопросу.
Я пока так ничего и не понял. У меня стоит Visual C++ 6.0 c Updat`ом и руссификатором. Может можно просто в другом редакторе (хоть в фаре) посмотреть исходник. Это процедура левого клика мышкой в файле TraceView.cpp. Файл прикрепил еще раз с учетом Ваших замечаний.Спасибо.
DlgInfo dlg;
dlg.SetEditStr("Hello DDX");
dlg.GetEditStr();
Вместо того, что выше нужно
DlgInfo dlg;
dlg.m_edit = "Hello DDX";
dlg.DoModal();
AfxMessageBox(dlg.m_edit);
И конечно мелочи жизни, (не моя прога), но массив m_par должен быть проинициализирован.
Проект не открывается.
DlgInfo dlg;
dlg.SetEditStr("Hello DDX");
dlg.GetEditStr();
Вместо того, что выше нужно
DlgInfo dlg;
dlg.m_edit = "Hello DDX";
dlg.DoModal();
AfxMessageBox(dlg.m_edit);
И конечно мелочи жизни, (не моя прога), но массив m_par должен быть проинициализирован.
Блин, почти работает. Единственное что все становиться модальным и недоступным приходится прогу выключать через диспетчера задач.
А также создается еще одно модальное окно, которое появляется в левом верхнем углу в котором все прописано как надо. Как теперь с этим бороться?
Однако, я готов потратить ещё немного, если вы локализуете свою проблему. Если трудность с DoDataExchange(), то создайте стандартный проект MFC и поместите туда свой диалог, выкинув всё лишнее. Тогда и проект откроется. Опишите, что не нравится. Вот тогда и посмотрим.
Однако, я готов потратить ещё немного, если вы локализуете свою проблему. Если трудность с DoDataExchange(), то создайте стандартный проект MFC и поместите туда свой диалог, выкинув всё лишнее. Тогда и проект откроется. Опишите, что не нравится. Вот тогда и посмотрим.
Здравствуйте, прошу прощения, что так долго не отвечал, не было время. Сейчас я сделал простенький проект. При нажатии мышкой на поле, должна выводиться строка в Edit, который расположен на причаливаемом диалоговом окне. UpdateData() не помогает. Ошибка сохраняется. Может быть надо как-то связать диалоговое окно с классом окна? Я запутался. Спасибо.
#include "mainfrm.h"
и
{
CTrace2App *pApp = (CTrace2App *)AfxGetApp();
CMainFrame *pMainFrame = (CMainFrame *)pApp->m_pMainWnd;
CWnd * pWnd = pMainFrame->m_wBar.GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("Hello!");
CView::OnLButtonDown(nFlags, point);
}
Чтоб прочитать, что введено в CEdit, нужен код типа
CMainFrame *pMainFrame = (CMainFrame *)pApp->m_pMainWnd;
CWnd * pWnd = pMainFrame->m_wBar.GetDlgItem(IDC_EDIT1);
CString str;
pWnd->GetWindowText(str);
AfxMessageBox(str);
Мимоходом, проект все еще не открывается.
Мимоходом, проект все еще не открывается.
Спасибо, огромное. Мне еще учиться и учиться. Все заработало!
Хочу считать значение CString из поля ввода(EditBox) в переменную, которая с ним связана. Применяю функцию UpdateData(), далее пытаюсь вывести значение переменной с помощью ф-ии AfxMessageBox. В ходе выполнения программы никаких ошибок не происходит, однако MessageBox выводит пустую строку.
Помогите, пожалуйста, я не понимаю почему так происходит!
работаю в Visual Studio .net 2003
...UpdateData...AfxMessageBox...Visual Studio .net...
Вроде правильно всё пишете. Может быть, дело тут вовсе не в UpdateData? Попробуйте вывести тестовую строку с помощью AfxMessageBox. Не покажет ли он такую же пустоту?
Дело в том, что у меня дважды была смешная проблема. Под VS.NET мои диалоги работали правильно, а вот любые mbox'ы выдавали окна с пустым текстом. Я даже обращался с этим вопросом в разные форумы.
Может быть, у вас та же ерунда?
Если есть хоть какие-то предложения, пожалуйста, ответьте.
Чувствую, там совсем простая проблема. Сам бы помог с удовольствием, но в связи с переменами в жизни у меня теперь нет ничего, кроме VBA и informix 4GL.
klingon, прицепите свой проект. На этом форуме всегда помогают. Раньше так было, по крайней мере. Надеюсь, что и сейчас ещё традиции живы.
[COLOR=blue]PS. Пролистал последние сообщения, нашёл знакомые имена людей, которых уважаю. Перечислять не буду, чтобы случайно кого-нибудь не забыть.
Всем желаю удачи.[/COLOR]
Честно говоря, такого я не ожидал.
Начал копаться в ф-ях, вызываемых UpdateData и обнаружил, что часть ф-ии создания WndCtrl и присвоения ему значения просто отсутствует(не хватало двух строк кода).
Короче, хотел разобраться в MFC, а пришлось выискивать ошибки в библиотеке MFC.:devil:
PS Большое спасибо sq_deep за участие и поддержку:) :) :)