Это расширенный элемент управления позволяет
перетаскивать элементы между списками при
помощи OLE. Программист может разрешать/запрещать
локальное перетаскивание элементов (т.е. в одном
и том же списке, автоматический скролинг и
удаление перенесённых элементов из исходного
списка.
Использование элемента
Инициализируем библиотеку OLE в функции InitInstance
Вашего приложения:
BOOL CDdDemoApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
// Call this when using MFC in a shared DLL
Enable3dControls();
#else
// Call this when linking to MFC statically
Enable3dControlsStatic();
#endif
//-------------------------// Initialize OLE libraries//-------------------------
if (!AfxOleInit())
return FALSE;
Вставляем #include "DDListCtrl.h" в файл описывающий
главный диалог приложения и содержащий Списки.
В функции OnInitDialog диалога, инициализируем и
создаём собственную инициалицию списков по
следующему шаблону:
BOOL CDdDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//.................................
//---------------------------->// 1 - Subclass the list controls//----------------------------
m_listVars.SubclassDlgItem(IDC_LIST_VAR, this);
m_listRows.SubclassDlgItem(IDC_LIST_ROWS, this);
m_listCols.SubclassDlgItem(IDC_LIST_COLS, this);
m_listData.SubclassDlgItem(IDC_LIST_DATA, this);
m_listPages.SubclassDlgItem(IDC_LIST_PAGES, this);
//--------------------------------------------------------------// 2 - Инициализируем списки//--------------------------------------------------------------
CString s(TCHAR('M'),29);
int len = m_listVars.GetStringWidth(s)+15;
LV_COLUMN lvC;
lvC.mask = LVCF_FMT | LVCF_WIDTH;
lvC.fmt = LVCFMT_LEFT; // колонка выравнена влево
lvC.cx = len; // Ширина колонки в пикселях
if (m_listVars.InsertColumn(0,&lvC) == -1)
return FALSE;
m_listVars.DeleteAllItems();
m_listVars.SetLocalDD(FALSE); // Запрещаем локальный Drag&Drop
m_listVars.SetScrolling(FALSE); // и авто скроллирование// Create a column for the row variables list view control.
if (m_listRows.InsertColumn(0,&lvC) == -1)
return FALSE;
m_listRows.DeleteAllItems();
// Create a column for the column variables list view control.
if (m_listCols.InsertColumn(0,&lvC) == -1)
return FALSE;
m_listCols.DeleteAllItems();
// Create a column for the data variables list view control.
if (m_listData.InsertColumn(0,&lvC) == -1)
return FALSE;
m_listData.DeleteAllItems();
// Create a column for the page variables view control.
if (m_listPages.InsertColumn(0,&lvC) == -1)
return FALSE;
m_listPages.DeleteAllItems();
//------------------------------------------// 3 - Устанавливаем содержимое списка//------------------------------------------
CWordArray aVars;
int size = m_pSelectInfo->m_asNames.GetSize();
aVars.SetSize(size);
// Initially the list of available variables contains all variables
for (int i=0; i<size; i++)
aVars[i] = i;
// Заполняем список переменных
m_pData->FillListCtrl(m_listVars, aVars);
m_pData->FillListCtrl(m_listRows, m_pSelectInfo->m_aRowsVar);
m_pData->FillListCtrl(m_listCols, m_pSelectInfo->m_aColsVar);
m_pData->FillListCtrl(m_listData, m_pSelectInfo->m_aDataVar);
m_pData->FillListCtrl(m_listPages, m_pSelectInfo->m_aPagesVar);
//-----------------------------------------------// 4 - Инициализируем списки для перетаскивания (Drag&Drop)//-----------------------------------------------
m_listVars.Initialize();
m_listRows.Initialize();
m_listCols.Initialize();
m_listData.Initialize();
m_listPages.Initialize();
return TRUE;
}