xtreme toolkit pro——CXTPReportControl控件教程-1

CXTPReportControl控件是xtreme toolkit pro中的一个控件,它用来显示表格,可以显示表头表尾,可以对各列排序,拖放,等等,,也可以对各个单元格进行编辑,功能非常强大。下面介绍一下他的使用:

  1. 在工程中头文件“stdafx.h”中添加:

    #include< XTToolkitPro.h> // Xtreme Toolkit Pro component library
    
  2. 如果要使用静态连接的方式,还应该:

    Add the following line to your application's .rc2 file. This will link in the toolkit resources so they are available to your application.  
    
    #include < XTToolkitPro.rc>
    

如果是动态连接的方式,需要xtreme toolkit的.dll拷贝到exe的输出目录下。

  1. 添加CXTPReportControl控件:

    (1)在对话框中添加一个自定义控件,将该控件的class属性改为XTPReport,ID改为;IDC_REPORTCTRL_LIST。

    (2)添加一个自定义变量:CXTPReportControl m_wndReportCtrl;

    (3)将控件和变量联系起来,在对话框初始化函数OnInitDialog()中添加如下代码:

    m_wndReportCtrlList.SubclassDlgItem(IDC_REPORTCTRL_LIST,this);
    
  2. 设置控件的外观:

    //初始化报表的外观
    
    m_wndReportCtrl.AllowEdit(FALSE);
    
    //m_wndReportCtrl.EditOnClick(FALSE);
    
    //m_wndReportCtrl.EnableDragDrop(NULL, xtpReportAllowDrag | xtpReportAllowDrop);//允许拖曳行
    
    m_wndReportCtrl.EnableToolTips(TRUE);//在列头显示提示tooltips
    
    //m_wndReportCtrl.ShowHeader(TRUE);//显示头部(默认显示)
    
    //m_wndReportCtrl.ShowHeaderRows(TRUE);//显示头行
    
    //m_wndReportCtrl.ShowFooter(TRUE);//显示页脚footer,即界面下边,与header对应
    
    //m_wndReportCtrl.ShowFooterRows(TRUE);//显示页脚行
    
    //m_wndReportCtrl.HeaderRowsAllowEdit(TRUE);//允许编辑HeaderRows
    
    //m_wndReportCtrl.FooterRowsAllowEdit(TRUE);//允许编辑FooterRows
    
    //COLORREF clrNew;
    
    //clrNew = RGB(0, 255, 0);
    
    // m_wndReportCtrl.SetGridColor(clrNew);//设置网格线颜色
    
    m_wndReportCtrl.SetGridStyle(TRUE,XTPReportGridStyle(xtpReportGridSolid));//设置垂直网格线风格
    
    m_wndReportCtrl.SetGridStyle(FALSE,XTPReportGridStyle(xtpReportGridSolid));//设置垂直网格线风格
    
    //m_wndReportCtrl.SetFreezeColumnsCount(2);//左侧两列冻住,注意,此方法必须在添加了列之后才能使用
    
    m_wndReportCtrl.GetPaintManager()->SetColumnStyle(XTPReportColumnStyle(xtpReportColumnOffice2007));//设置列的风格
    
    //m_wndReportCtrl.GetPaintManager()->SetGridColor(clrNew);//设置网格线颜色
    
    m_wndReportCtrl.GetReportHeader()->AllowColumnRemove(FALSE);//不允许移除列
    
    m_wndReportCtrl.GetReportHeader()->AllowColumnResize(TRUE);//允许改变列的宽度
    
    m_wndReportCtrl.GetReportHeader()->AllowColumnSort(TRUE);//允许对列中的各行排序
    
    m_wndReportCtrl.GetReportHeader()->AllowColumnReorder(FALSE);//不允许列之间重新排序(通过拖拽列头部)
    
    m_wndReportCtrl.GetReportHeader()->SetAutoColumnSizing(TRUE);//不允许各列自动调节宽度
    
    //设置列宽自动调整为false,这样一来,所有列宽不是随reportControl的宽度变化而自动变化。
    
    //如果所有的列宽之和大于reportControl的宽度,就会自动显示横向工具条
    
    m_wndReportCtrl.SetFullColumnScrolling(FALSE);//按像素水平滚动,而不是逐列滚动(即滚动一下就移动一列)
    
    //m_wndReportCtrl.SetFullColumnScrolling(TRUE);//逐列滚动(即滚动一下就移动一列)
    
    m_wndReportCtrl.SetMultipleSelection(TRUE);//允许多选
    
  3. 添加列:

    ///添加列
    
    CXTPReportColumn* pCol1=new CXTPReportColumn(0, _T("序号"), 80);
    
    pCol1->SetHeaderAlignment(DT_CENTER);
    
    pCol1->SetAlignment(DT_CENTER);
    
    //pCol1->SetEditable(FALSE);//不可编辑
    
    m_wndReportCtrl.AddColumn(pCol1);
    
  4. 添加行

    CXTPReportRecord *pRecord = new CXTPReportRecord();
    
    pRecord->AddItem(new CXTPReportRecordItemNumber(i+1));//行号
    
    pRecord->AddItem(new CXTPReportRecordItemText(m_pDataGroup->m_arrDataTable[i].m_sBusInfo));//基本信息
    
    pRecord->AddItem(new CXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw1,KEY_FORMAT_NUMBER));
    
    pRecord->AddItem(new CXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw2,KEY_FORMAT_NUMBER));
    
    pRecord->AddItem(new CXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw2-m_pDataGroup->m_arrDataTable[i].m_dMw1,KEY_FORMAT_NUMBER));
    
    m_wndReportCtrl.AddRecord(pRecord);
    
  5. 显示

    m_wndReportCtrl.Populate();
    
  6. 添加报表行焦点改变事件:

    (1)在报表所在对话框的头文件中添加消息映射函数:

    afx_msg void OnReportFocusChanging(NMHDR* pNMHDR, LRESULT* result);
    

    (2)在报表所在对话框的源文件中将消息映射函数和报表控件联系起来,即在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加:

    ON_NOTIFY(XTP_NM_REPORT_FOCUS_CHANGING, IDC_REPORTCTRL_LIST, OnReportFocusChanging)
    

    (3)实现消息映射函数,如下:

    //表中焦点行改变时的事件(包括用鼠标单击和用键盘的方向键)
    
    void CWEReportDlg::OnReportFocusChanging(NMHDR * pNotifyStruct, LRESULT * /*result*/)
    
    {
    
    XTP_NM_REPORTRECORDITEM* pItemNotify = (XTP_NM_REPORTRECORDITEM*) pNotifyStruct;
    
    if (!pItemNotify)   return;
    
    CXTPReportRow* pRowSel=pItemNotify->pRow;
    
    if (!pRowSel)   return;
    
    TRACE(_T("Click on row %d\n"),pRowSel->GetIndex());
    
    CXTPReportRecord* pRecordSel=pRowSel->GetRecord();
    
    if(!pRecordSel) return;
    
    CXTPReportRecordItemText* pText=(CXTPReportRecordItemText*)(pRecordSel->GetItem(0));
    
    if(!pText) return;
    
    if (pText->GetValue().Trim()==m_sTableNameNow)
    
    {
    
        return;//如果单击的行和上一次是同一行,就不用进行下面的操作
    
    }
    
    //更新当前记录和ATC
    
    m_sTableNameNow=pText->GetValue().Trim();
    
    if (m_sTableNameNow!="")
    
    {
    
        FindTableByName(m_sTableNameNow);
    
        //更改选择的报表后,更新相应的已选框和待选框中的内容
    
        UpdateReportTable();
    }
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值