void CCustomHeader::OnPaint() { CPaintDC dc(this); int ItemCount = GetItemCount(); CRect cRC; GetClientRect(&cRC); CBrush brush; CBitmap bmp; bmp.LoadBitmap(IDB_LISTHEAD); brush.CreatePatternBrush(&bmp); dc.FillRect(cRC,&brush); CPen pen(PS_SOLID,1,RGB(236,233,216)); for (int i = 0 ; i <ItemCount; i++) { CRect rc; GetItemRect(i,rc); rc.DeflateRect(0,0,1,0); //绘制分隔条 dc.SelectObject(&pen); dc.MoveTo(rc.right+1,0); dc.LineTo(rc.right+1,rc.Height()); //绘制文本 char text[100]; memset(text,0,100); CListCtrl* pList = (CListCtrl*)this->GetParent(); if (pList != NULL) { LVCOLUMN col; memset(&col,0,sizeof(LVCOLUMN)); col.mask = LVCF_TEXT; col.cchTextMax = 100; col.pszText = (LPWSTR)text; pList->GetColumn(i,&col); dc.SetTextColor(RGB(0,0,0)); CFont* font = GetFont(); dc.SelectObject(font); dc.SetBkMode(TRANSPARENT); CString str ; str.Format(_T("%s"),text); dc.DrawText(str,rc,DT_CENTER |DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); } } pen.DeleteObject(); bmp.DeleteObject(); brush.DeleteObject(); }
// @pymethod <o LV_COLUMN>|PyCListCtrl|GetColumn|Retrieves the details of a column in the control. PyObject *PyCListCtrl_GetColumn( PyObject *self, PyObject *args ) { int col; if (!PyArg_ParseTuple( args, "i:GetColumn", &col)) // @pyparm int|column||The index of the column whose attributes are to be retrieved. return NULL; CListCtrl *pList = GetListCtrl(self); if (!pList) return NULL; TCHAR textBuf[256]; LV_COLUMN lvItem; lvItem.pszText = textBuf; lvItem.cchTextMax = sizeof(textBuf)/sizeof(TCHAR); lvItem.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; GUI_BGN_SAVE; BOOL ok = pList->GetColumn( col, &lvItem); GUI_END_SAVE; if (!ok) RETURN_ERR("GetColumn failed"); return PyWinObject_FromLV_COLUMN(&lvItem); }
void CDumpListCtrlToCSV::Dump(CListCtrl& cListCtrl, CWnd* pParent) { CString sCSVFileFilter; sCSVFileFilter.LoadString(IDS_CSVFILEFILTER); CFileDialog fileDlg(FALSE, _T("csv"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, sCSVFileFilter, pParent); if (fileDlg.DoModal() != IDOK) { return; } CWaitCursor cursor; CStringArray columns; int nColumn = 0; while (1) { TCHAR szColumnName[256]; LVCOLUMN column; column.mask = LVCF_TEXT; column.pszText = szColumnName; column.cchTextMax = _countof(szColumnName); if (cListCtrl.GetColumn(nColumn, &column) == FALSE) { break; } columns.Add(column.pszText); nColumn++; } TRY { const int nFileMode = CFile::modeCreate | CFile::modeWrite | CFile::shareDenyRead | CFile::shareDenyWrite; CFile file(fileDlg.GetPathName(), nFileMode); #ifdef _UNICODE const BYTE byUnicodePrefix[2] = { 0xff, 0xfe }; file.Write(byUnicodePrefix, sizeof(byUnicodePrefix)); #endif const CString sEOL(_T("\r\n")); int nColumns = (int) columns.GetCount(); for (int i = 0; i < nColumns; i++) { CString sData; sData.Format(_T("\"%s\""), columns[i]); if (i > 0) { sData.Insert(0, ','); } file.Write(sData, sData.GetLength() * sizeof(CString::XCHAR)); } file.Write(sEOL, sEOL.GetLength() * sizeof(CString::XCHAR)); int nRows = cListCtrl.GetItemCount(); for (int i = 0; i < nRows; i++) { for (int j = 0; j < nColumns; j++) { CString sText = cListCtrl.GetItemText(i, j); if (sText.FindOneOf(_T(", ")) >= 0) { CString sTemp(sText); sText = _T("\""); sText += sTemp; sText += _T("\""); } if (j > 0) { sText.Insert(0, ','); } file.Write(sText, sText.GetLength() * sizeof(CString::XCHAR)); } file.Write(sEOL, sEOL.GetLength() * sizeof(CString::XCHAR)); } } CATCH (CFileException, e) { CString sMsg; sMsg.Format(IDS_ERROR_CSVFILEWRITE, e->m_strFileName); AfxMessageBox(sMsg, MB_OK | MB_ICONEXCLAMATION); }
void COpenExcelDlg::Lin_ExportListToExcel(CListCtrl &m_List) { if (m_List.GetHeaderCtrl()->GetItemCount()>0) { CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange cols; int i = 3; CString str1, str2; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if( !app.CreateDispatch(_T("Excel.Application"))) { MessageBox(_T("无法创建Excel应用!")); return; } books=app.get_Workbooks(); book=books.Add(covOptional); sheets=book.get_Sheets(); sheet=sheets.get_Item(COleVariant((short)1)); //写入表头// for (int ColumNum=1;ColumNum<m_List.GetHeaderCtrl()->GetItemCount();ColumNum++) { str2 = Lin_GetEnglishCharacter(ColumNum); str2 = str2 + _T("1"); LVCOLUMN lvColumn; TCHAR strChar[256]; lvColumn.pszText=strChar; lvColumn.cchTextMax=256 ; lvColumn.mask = LVCF_TEXT; m_List.GetColumn(ColumNum,&lvColumn); CString str=lvColumn.pszText; range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); } //获取单元格的位置// for (int ColumNum =1;ColumNum<m_List.GetHeaderCtrl()->GetItemCount();ColumNum++) { for (int ItemNum = 0;ItemNum<m_List.GetItemCount();ItemNum++) { str2 = Lin_GetEnglishCharacter(ColumNum); str1.Format(_T("%d"),ItemNum+2); str2 = str2+str1; CString str = m_List.GetItemText(ItemNum,ColumNum); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); } } cols=range.get_EntireColumn(); cols.AutoFit(); app.put_Visible(TRUE); app.put_UserControl(TRUE); }else{ AfxMessageBox(_T("列表为空")); } }
void CListCtrlComboBox::ShowEdit(int nItem,int nSubItem) { if (nItem < 0 || nSubItem < 0) return; if (m_pParentList == NULL) return ; CListCtrl *pCtrl = m_pParentList; CRect rect; m_pParentList = pCtrl; // m_pParentList->GetSubItemRect(nItem,nIndex,LVIR_LABEL,rcCtrl); // 列可见 CHeaderCtrl* pHeader = (CHeaderCtrl*)pCtrl->GetDlgItem(0); int nColumnCount = pHeader->GetItemCount(); if( nSubItem >= nColumnCount || pCtrl->GetColumnWidth(nSubItem) < 5 ) return ; // 列偏移 int offset = 0; for( int i = 0; i < nSubItem; i++ ) offset += pCtrl->GetColumnWidth( i ); pCtrl->GetItemRect( nItem, &rect, LVIR_BOUNDS ); rect.top -= 2; if (rect.top < 0) rect.top = 0; // 滚动列,便于操作 CRect rcClient; CSize size; pCtrl->GetClientRect( &rcClient ); // if( offset + rect.left < 0 || offset + rect.left > rcClient.right ) if( offset + rect.left < 0 ) { size.cx = offset + rect.left; size.cy = 0; pCtrl->Scroll( size ); rect.left -= size.cx; } else if(offset + rect.left > rcClient.right ) { size.cx = offset + rect.left; size.cy = 0; pCtrl->Scroll( size ); rect.left -= size.cx; } // 获取列的对齐方式 LV_COLUMN lvcol; lvcol.mask = LVCF_FMT; pCtrl->GetColumn( nSubItem, &lvcol ); DWORD dwStyle; if((lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_LEFT) dwStyle = ES_LEFT; else if((lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_RIGHT) dwStyle = ES_RIGHT; else dwStyle = ES_CENTER; rect.left += offset + 1; if (nSubItem > 0) rect.right = rect.left + pCtrl->GetColumnWidth( nSubItem ); else rect.right = rect.left + pCtrl->GetColumnWidth( nSubItem ); if( rect.right > rcClient.right) rect.right = rcClient.right; rect.bottom = rect.top + 12 * rect.Height(); CString strItem = pCtrl->GetItemText(nItem,nSubItem); pCtrl->ClientToScreen(rect); GetParent()->ScreenToClient(rect); MoveWindow(rect); // SetWindowPos(NULL, rect.left,rect.top,rect.Width(),rect.Height(), SWP_SHOWWINDOW); // pCtrl->ClientToScreen(rcClient); // GetParent()->ScreenToClient(rcClient); // pCtrl->SetWindowPos(this, rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(), SWP_SHOWWINDOW); ShowWindow(SW_SHOW); SetWindowText(strItem); ::SetFocus(GetSafeHwnd()); SetItemHeight(-1,13); //设置对应选项 int nIndex = FindStringExact(0, strItem); if (nIndex < 0) nIndex = 0; SetCurSel(nIndex); m_nCurrentItem = nItem; m_nCurrentSubItem = nSubItem; }