Member 13460634 Ответов: 1

Как отобразить данные в поле редактирования правой панели при нажатии на элемент управления дерево левой панели


Я создал приложение MDI в MFC , я сделал до разделенной страницы как левую и правую панели ,а также добавил элемент управления tree в левую и edit control в правую панель.

Моя проблема заключается в том, как получить данные из INI-файла в тот момент, когда вы нажимаете на элемент управления tree и данные должны отображаться в правой панели.

Что я уже пробовал:

void CFormLeft::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	HTREEITEM hParent = m_TreeCtrl.InsertItem(L"STUDENT DETAILS", TVI_ROOT);
	HTREEITEM hChild = m_TreeCtrl.InsertItem(L"STUDETN1", hParent, TVI_LAST);
	HTREEITEM hChild1 = m_TreeCtrl.InsertItem(L"STUDETN2", hParent, TVI_LAST);
	HTREEITEM hChild2 = m_TreeCtrl.InsertItem(L"STUDETN3", hParent, TVI_LAST);
	HTREEITEM hChild3 = m_TreeCtrl.InsertItem(L"STUDETN4", hParent, TVI_LAST);
	HTREEITEM hChild4 = m_TreeCtrl.InsertItem(L"STUDETN5", hParent, TVI_LAST);
	

	//HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();

	//CString strItemText = m_TreeCtrl.GetItemText(hItem);
}

void CFormLeft::OnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	// TODO: Add your control 	notification handler code here
	HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
	CString strItemText = m_TreeCtrl.GetItemText(hItem);

	//MessageBox(strItemText);
	//m_student1.SetWindowText(L"DETAILS OF SURESH");
	
	*pResult = 0;

Richard MacCutchan

Обычным способом является для обработчика события TreeView элемент, чтобы отправить сообщение в другое окно.

1 Ответов

Рейтинг:
1

Jochen Arndt

Вам нужен доступ к правой панели, содержащей элемент управления edit. Как это сделать, зависит от того, как организованы ваши панели.

Я предполагаю, что CSplitterWnd с двумя статическими панелями, содержащими элемент управления tree и элемент управления edit. Тогда у вас есть три варианта:


  1. Передача информации на ваш компьютер CFormLeft класс при создании из родительского окна
  2. Получение информации во время выполнения из родительского окна
  3. Добавьте соответствующие функции в родительское окно
Во всех случаях родитель (CSplitterWnd) окно должно иметь элементы для панелей (CLeftPane и CRightPane).
[РЕДАКТИРОВАТЬ]
и указатель на него (this) должен быть передан в качестве родительского параметра при создании представлений панели.
[РЕДАКТИРОВАТЬ]

Для первого случая добавить CRightPane* член вашей организации CLeftPane класс, который инициализируется каким-либо образом (конструктор или функция сеттера; оба вызываются из родительского окна).

Для второго случая реализуйте функцию получения указателя на правую панель из родительского окна splitter, приведите родительское окно изнутри CLeftPane и вызовите функцию-геттер
CMySplitterWnd *pParent = (CMySplitterWnd *)GetParent();
// Must be implemented:
// CRightPane* CMySplitterWnd::GetRightPane() { return m_pRightPane; }
CRightPane* pRightPane = pParent->GetRightPane();

Как только у вас есть указатель на вид правой панели, вы можете вызывать функции или отправлять сообщения по мере необходимости. При необходимости добавьте функции к CRightPane* класс для конкретных задач (например, для доступа к элементу управления редактированием).

В третьем случае реализуйте в родительском элементе функцию, которая перенаправляет команды на правую панель
CMySplitterWnd *pParent = (CMySplitterWnd *)GetParent();
// Must be implemented:
// CMySplitterWnd::SetRightPaneEditText(const CString& s)
// { 
// m_pRightPane->m_editCtrl.SetWindowText(strItem); 
// }
pParent->SetRightPaneEditText(strItemText);