Example #1
0
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);
}
Example #3
0
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);
    }
Example #4
0
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;
}