![]() |
|
![]() ![]() ![]() |
|
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
После чтения и заполнения переменных диалога, связанных с полями, вызови UpdateData (false).
-------------------- ... |
|||
|
||||
eugeniy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
Я так полагаю , мне нужно в файле readerDlg.cpp написать в функции BOOL CReaderDlg::OnInitDialog() { CDialog::OnInitDialog(); m_surname_CTRL.SetWindowText (вот тут что писать, я же не могу написать просто birth ведь это переменная другого класса, как мне тут поступить, чтобы вывести содержимое birth класса CReader из файла reader_writer.cpp?); UpdateData(false); m_surname - объявленна как контрол. т.е. DDX_Control ( pDX, IDC_SURNAME, m_surname_CTRL); p.s: Почему когда категорию переменной ставишь value и тип Cstring, т.е. когда обращаешься к свойству объекта, а не к объекту в целом...то при вызове диалога, имя переменной затирается... ![]() |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
eugeniy, тебе нужно получить данные для отображения, для этого нужен механизм взаимодействия между диалогом и кодом, получающим данные. Подключи в диалоге заголовок CReader - a и вызывай его функции, полученные данные копируй в переменные диалога.
Добавлено через 2 минуты и 47 секунд Что ты имеешь ввиду под словом "затирается"? |
|||
|
||||
eugeniy |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
подключил в диалоге readerDlg.cpp заголовок СReader, путём подключения вверху хэдера reader_writer.h...
можете тут на примере пожалуйста показать, как это делается так? BOOL CReaderDlg::OnInitDialog() { CDialog::OnInitDialog(); BOOL CReader::Card_read() { m_surname_CTRL.SetWindowText(birth); UpdateData(false); } } или как тогда?
просто когда запускаешь диалог, то поле фамилия имеющая тип CString исчезает. |
||||||
|
|||||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Чтобы показать на примере, нужно хотябы знать интерфейс CReader (кстати, это тип или именованное пространство?). Если это тип, то в классе диалога нужно создать его объект и через него получать доступ к функциям. Скорее всего, нужно будет расширить функционал функцией, в которую будут передаваться переменные для получения данных, так как представленная Card_read() получает данные во внутренние переменные. Что-то вроде
Полученное преобразовать к CString и отобразить. ЗЫ Если ты в классе диалога завёл переменную, определённую как control, то незачем вызывать UpdateData, ведь ты работаешь с объектом напрямую. Это сообщение отредактировал(а) Albor - 19.4.2010, 12:30 |
|||
|
||||
eugeniy |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
Да CReader - это тип. Я создал объект класса CReader
и про инициализировал БД mysql
можете показать на примере как это примерно должно выглядеть?
ну в принципе верно, я ведь не с отдельным свойством объекта работаю, а как с ним целым. |
||||||||||||
|
|||||||||||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Примерно так:
Вызвав эту функцию из диалога, переданные в неё указатели будут указывать на нужные данные. А для отображения вызываешь m_surname_CTRL.SetWindowText(pBirth); Принцип понятен? Тебе, конечно, нужно будет подправить под свои нужды. Можно скопировать данные, а не получать указатели, чтобы не "вмешиваться" во внутреннее устройство CReader, но это уже как тебе больше нравится ![]() |
|||
|
||||
eugeniy |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
Значит получилось так, функция описана в reader_writer.cpp
Предварительно в файле reader_writer.h прописал ещё один метод класса:
затем он ругался, что не понимает идетификатор rowSize, объявил его как целый тип, и обнулил. После этих манипуляций вызвал в BOOL CReaderDlg::OnInitDialog()
и вот затем если я хочу вызывать функцию для отображения то бишь
то компилятор пишет: --------------------Configuration: reader - Win32 Debug-------------------- Compiling... readerDlg.cpp c:\program files\microsoft visual studio\vc98\bin\reader(2)\reader\readerdlg.cpp(154) : error C2039: 'SetWindowTextA' : is not a member of 'CString' c:\program files\microsoft visual studio\vc98\mfc\include\afx.h(368) : see declaration of 'CString' c:\program files\microsoft visual studio\vc98\bin\reader(2)\reader\readerdlg.cpp(154) : error C2065: 'pBirth' : undeclared identifier Error executing cl.exe. readerDlg.obj - 2 error(s), 0 warning(s) |
||||||||||||
|
|||||||||||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Так m_birthday_CTRL имеет тип CString?
Добавлено @ 12:33 Кстати, и rowSize зря ты обнулил. Где-то ж у тебя определяется размер массива row, вот его-то и нужно использовать. Именно это я и имел ввиду под rowSize. Добавлено @ 12:35 А fakultet_name это массив строк? Это сообщение отредактировал(а) Albor - 20.4.2010, 12:40 |
|||
|
||||
eugeniy |
|
||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
да что-то я тупанул))) исправил на CEdit теперь пишет, что pBirth не определена Добавлено @ 12:33
у меня row, объвлен как MYSQL_ROW row; MYSQL_ROW - это указатель на указатель на символ ) т.е. - это указатель не на строку, а на массив строк. То есть я получаю функцией mysql_fetch_row в переменную row целый массив строк. |
||||
|
|||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
||||
|
||||
eugeniy |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
Добавлено @ 12:35
да, также массив строк, аналогично и kurs_name Добавлено через 4 минуты и 40 секунд
т.е. определить в данных класса CReader, также как и др. переменные? |
||||||
|
|||||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Понятно, у тебя получается в CReader набор записей. Тогда нужно получать размеры для каждого массива, иначе как ты будешь обрабатывать указатели. Или решить вопрос по другому: обратиться к CReader с "просьбой" вернуть определённую запись, скажем, по индексу. Всё-таки очень трудно что-то разумное подсказать, не имея более полной информации. |
|||
|
||||
eugeniy |
|
||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 23.3.2010 Где: Петрозаводск Репутация: нет Всего: нет |
это так что ли? CWnd* wnd=GetDlgItem(IDC_BIRTHDAY); wnd->SetWindowText(pBirth);
дак я вам могу её предоставить, ежели требуется... |
||||
|
|||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Нет, определить в диалоге перед вызовом функции объекта CReader. Переменные ведь передаются по ссылке, значит, прежде чем их "скормить" в функцию, они должны существовать. Добавлено через 5 минут и 26 секунд Это нормально для установки текста в контроле с id IDC_BIRTHDAY, только pBirth должен указывать на массив символов с завершающим нулём (с-строку), а для этого pBirth нужно скормить функции GetData() и, после того как она отработает устанавливать текст в контроле. Добавлено через 7 минут и 34 секунды Покажи хеадер класса CReader. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |