Features
This extended list control allow OLE drag and drop between list controls. The programmer can enable/desable
local drag and drop of list items inside the same control, automatic scrolling and the removing of
dragged items from the source list.
Control Usage
- Initialize the OLE libraries in the application InitInstance member function:
- Insert the #include “DDListCtrl.h” in the dialog C++ file which contains the List Ctrls.
- In the OnInitDialog member function of the dialog, initialize and customize the list controls initialization according to the following template:
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;
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 - Initialize the List view controls //-------------------------------------------------------------- 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; // Left-align column lvC.cx = len; // Width of column in pixels if (m_listVars.InsertColumn(0,&lvC) == -1) return FALSE; m_listVars.DeleteAllItems(); m_listVars.SetLocalDD(FALSE); // Disable local Drag&Drop m_listVars.SetScrolling(FALSE); // and auto scrolling // 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 - Set the content of the list view controls //------------------------------------------ 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; // Fill the list of variables 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 - Initialize the list controls for Drag&Drop //----------------------------------------------- m_listVars.Initialize(); m_listRows.Initialize(); m_listCols.Initialize(); m_listData.Initialize(); m_listPages.Initialize(); return TRUE; }