Создав встроенные Диалоги о ListView в МФЦ
это возможно, чтобы создать диалоговое окно, которые по ListView?
Для справки о моем вопросе вы можете посмотреть ссылку ниже
"https://www.codeproject.com/Articles/4408/Creating-embedded-dialogs-in-MFC?msg=5381464#xx5381464xx">
но в приведенной выше ссылке реализован встроенный диалог на самом диалоге
но в моем требовании я должен реализовать встроенный диалог <в listview.
когда я следую тому же подходу(согласно ссылке) для listview, то он не встроен и показывает всплывающее диалоговое окно, но мое требование встроено.
не могли бы вы помочь здесь
Что я уже пробовал:
я пробовал с
CListCtrl &ctlRightView = GetListCtrl();
Проверка (фильтры.Create (IDD_DIALOG_FILTERS, this));
Преобразование в текст;
фильтры.GetWindowText (text); / / filters-объект для нового диалога
ctlRightView.InsertItem(TCIF_TEXT, 0, text, 0, 0, 0, 0)
фильтры.ShowWindow (TRUE);
Jochen Arndt
Вы хотите реализовать некоторые фильтрующие элементы?
Если это так, то это можно сделать над списком с помощью подклассового элемента управления заголовком, содержащего элементы управления фильтром.
Но это не тривиально и слишком сложно для "быстрых ответов".
Member 13089825
Вы хотите реализовать некоторые фильтрующие элементы?
Нет, просто я хочу вставить один диалог(это не какой-то фильтр,здесь мое имя диалога-фильтр,вот почему, возможно, вы запутались, извините).
Jochen Arndt
Вы должны описать, что вы хотите реализовать, где (что должно быть перекрыто) и на каком типе взаимодействия пользователей должно быть обработано (когда должно быть показано и когда удалено). Диалог-это окно с рамкой, строкой заголовка, клиентской областью, содержащей элементы управления и элемент управления для закрытия окна. Когда вы "встраиваете" что-то, вам обычно не нужны рамка и строка заголовка.
Упомянутый lik не объясняет, потому что он предназначен для диалога, а не для listview.
Например, можно было бы встроить элемент управления в ячейку (или строку, если он не находится в режиме отчета). Но это становится еще сложнее, если несколько ячеек должны быть покрыты или список прокручивается.
Member 13089825
у меня есть один мэйнфрейм(производный от CFrameWnd), и этот класс я разделил на две части: один-leftview (производный от CTreeView), а другой-rightview(производный от CListView)
нижеприведенный метод я разделил на две части
BOOL CMainFrame:: OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
если (!m_wndSplitter.CreateStatic(это, 1, 2))
если (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
! m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CJIMSRightView), CSize(100, 100), pContext))
{
// | / ! m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS (CFilters), CSize(100, 100), pContext)
m_wndSplitter.Вызове destroywindow();
возвращать false;
}
}
int CMainFrame:: OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_wndSplitter.SetColumnInfo(0, 175, 20);
m_wndSplitter.SetRowInfo(0, 175, 20);
}
когда я нажал какой-то текст в левом окне, то мне нужно вставить один диалог в вид справа(и он должен быть встроен, а не всплывать)
не могли бы вы предоставить свой почтовый идентификатор, чтобы я мог поделиться некоторыми скриншотами
Jochen Arndt
Итак, вы хотите заменить полный listview другим окном?
Тогда у меня нет готового решения, но есть идея:
При создании представления создайте диалоговое окно в скрытом состоянии с помощью переменной-члена. При выборе элемента в древовидном представлении инициализируйте элементы управления диалогом, скройте список и покажите диалог. Когда закончите, сделайте наоборот: обновите список, скройте диалоговое окно и покажите список.
Обратите внимание, что может потребоваться отслеживать / реагировать на изменения размера окна просмотра (обработайте WM_SIZE, чтобы применить изменения также к скрытому виду или убедитесь, что скрытый вид изменен до фактического размера, когда он становится видимым).
Member 13089825
Итак, вы хотите заменить полный listview другим окном?
> & gt; Да, можно ли вставить диалог в listview?
да ваша идея хороша но для этого мне нужно изменить общий дизайн но я попробую эту идею один раз
Jochen Arndt
Должно быть не слишком много работы:
- Создать диалог в OnInitialUpdate вашего класса view
- Реализовать функцию переключения между списком и диалогом
- Вызов функции переключения из обработчика treeview и при закрытии диалогового окна
- Уничтожить диалог в деструкторе вида
Вышеизложенное не должно требовать внесения изменений в фактический дизайн (это просто дополнения), а передача данных в диалог и в список при закрытии / скрытии диалога должна быть уже там.
Member 13089825
но мой внутренний класс не будет содержать этот methos, потому что он наследуется от CFrameWnd
виртуальный BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnUpdateViewStyles(CCmdUI* pCmdUI);
afx_msg void OnViewStyle(UINT nCommandID);
DECLARE_MESSAGE_MAP()
извините, я новичок в MFc, поэтому спрашиваю только об этом типе сомнений
Jochen Arndt
Вы должны использовать класс смотреть (CJIMSRightView
).
Я предполагаю, что это CListView
производный класс.
Добавьте участника для диалога: CMyDialog *m_pDialog;
В OnInitialUpdate: m_pDialog = new CMyDialog();
Воспользуйся GetListCtrl().ShowWindow()
и m_pDialog.ShowWindow()
.
Однако до сих пор я этого не делал, но думаю, что это должно быть возможно.
Member 13089825
Для справки пожалуйста смотрите ссылку ниже
https://www.codeproject.com/Articles/4408/Creating-embedded-dialogs-in-MFC?msg=5381464#xx5381464xx