2016-05-30 14 views
0

Я кодирую тестовое приложение для устройства Windows CE. Это первый раз, когда я программирую карманное устройство. Я использую MFC VC++ в Visual Studio 2008. Я обнаружил, что в элементах управления есть много ограничений и что я могу сделать с ними при удобной работе программы, когда я запускаю аналогичную программу на настольном компьютере.Отображение и использование одного и того же элемента управления MFC CLIST в нескольких диалоговых окнах

Теперь устройство, к которому я в настоящее время подключаю свою тестовую программу, не имеет сенсорного экрана и имеет несколько дополнительных клавиш, кроме клавиш numpad 0-9. Итак, я должен сделать с простым графическим интерфейсом, который использует keydowns для вызова определенных функций, таких как добавление, редактирование, удаление и т. Д. Это также заставляет меня использовать отдельные диалоги для каждой из этих функций, чтобы избежать ненужного использования курсора мыши.

Это приводит меня к моей нынешней проблеме: «Добавить» диалог моего тестового приложения добавляет некоторые пользовательские данные CListCtrl , который в диалоговом «основному». «Изменить/Удалить» диалог, чтобы позволить пользователю выбрать нужные данные из свой CListCtrl и нажмите клавишу «ENTER», который таким образом удаляет выбранные данные из «MAIN» CListCtrl диалогового окна в. Таким образом, как основной диалог, так и диалог «EDIT/DELETE» имеют CListCtrl с точно такими же данными. Таким образом, вместо того, чтобы использовать два отдельных элемента управления списками и использовать циклы для копирования данных между ними, существует ли способ, которым я мог бы использовать тот же CListCtrl (один и единственный экземпляр CListCtrl существует) , но отобразить его на 2 отдельных диалогах? Это приведет к удалению всего кода копирования, а также уменьшит вдвое объем данных в памяти.

Я попытался передать указатель на CListCtrl диалога MAIN в диалог «EDIT/DELETE» в надежде, что я смогу перерисовать элемент управления там, но напрасно. Я мог бы вызвать команды RedrawWindow, RedrawItems, но они, похоже, не имеют эффекта в диалоговом окне «EDIT/DELETE» (я думаю, это потому, что сам элемент управления отсутствует в диалоговом окне редактирования/удаления). Любые другие предложения?

+0

Я также попытался вызвать функцию CListCtrl Create, используя пройденный указатель из диалогового окна «EDIT/DELETE». Кажется, что создается элемент управления List, но данные не отражаются, возможно, потому что Create создает новый экземпляр CListCtrl ... – PRinCEKtd

+0

Я предполагаю, что ваш диалог EDIT/DELETE находится поверх главного диалога, поэтому основной диалог будет существовать на фоне другого. Затем должно быть возможно временно переместить listctrl в другой диалог с помощью функции 'CWnd :: SetParent'. Что вы подразумеваете под «Я пытался передать указатель»? –

+0

Диалог MAIN скрыт, и за один раз отображается только один диалог. ** Передача его указателем ** Я пробовал что-то вроде этого кода в главном диалоговом окне: 'EditDialog myEditDialog (& M_cDataList); // M_cDataList переменная в CListCtrl' и в EditDialog: 'EditDialog (CListCtrl * pListCtrl);' , а затем использовал этот указатель, чтобы попытаться отобразить управления списком. Конечно, я могу получить доступ к данным с помощью этого указателя, но я не мог заставить его отображаться в диалоговом окне «Редактировать». – PRinCEKtd

ответ

2

Вы можете временно изменить родительский элемент ListCtrl с помощью CWnd::SetParent в диалог EDIT/DELETE и установить позицию с CWnd::SetWindowPos там, где вы хотите ее использовать. Когда диалоговое окно закрывается, верните родительский элемент в диалог MAIN.