




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
xtreme toolkit proCXTPReportControl控件教程作者:Kevin.Xiong来源:博客园发布时间:2011-03-31 14:10阅读:31 次原文链接收藏CXTPReportControl控件是xtreme toolkit pro中的一个控件,它用来显示表格,可以显示表头表尾,可以对各列排序,拖放,等等,也可以对各个单元格进行编辑,功能非常强大。下面介绍一下他的使用:1. 在工程中头文件“stdafx.h”中添加:#include / Xtreme Toolkit Pro component library2. 如果要使用静态连接的方式,还应该:Add the following line to your applications .rc2 file. This will link in the toolkit resources so they are available to your application.#include 如果是动态连接的方式,需要xtreme toolkit的.dll拷贝到exe的输出目录下。3. 添加CXTPReportControl控件:(1)在对话框中添加一个自定义控件,将该控件的class属性改为XTPReport,ID改为;IDC_REPORTCTRL_LIST。(2)添加一个自定义变量:CXTPReportControl m_wndReportCtrl;(3)将控件和变量联系起来,在对话框初始化函数OnInitDialog()中添加如下代码:m_wndReportCtrlList.SubclassDlgItem(IDC_REPORTCTRL_LIST,this);4. 设置控件的外观:/初始化报表的外观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);/允许多选5. 添加列:/添加列CXTPReportColumn* pCol1=new CXTPReportColumn(0, _T(序号), 80);pCol1-SetHeaderAlignment(DT_CENTER);pCol1-SetAlignment(DT_CENTER);/pCol1-SetEditable(FALSE);/不可编辑m_wndReportCtrl.AddColumn(pCol1);6. 添加行CXTPReportRecord *pRecord = new CXTPReportRecord();pRecord-AddItem(new CXTPReportRecordItemNumber(i+1);/行号pRecord-AddItem(new CXTPReportRecordItemText(m_pDataGroup-m_arrDataTablei.m_sBusInfo);/基本信息pRecord-AddItem(new CXTPReportRecordItemNumber(m_pDataGroup-m_arrDataTablei.m_dMw1,KEY_FORMAT_NUMBER);pRecord-AddItem(new CXTPReportRecordItemNumber(m_pDataGroup-m_arrDataTablei.m_dMw2,KEY_FORMAT_NUMBER);pRecord-AddItem(new CXTPReportRecordItemNumber(m_pDataGroup-m_arrDataTablei.m_dMw2-m_pDataGroup-m_arrDataTablei.m_dMw1,KEY_FORMAT_NUMBER);m_wndReportCtrl.AddRecord(pRecord);7. 显示m_wndReportCtrl.Populate();8. 添加报表行焦点改变事件:(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 %dn),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;/如果单击的行和上一次是同一行,就不用进行下面的操作/更新当前记录和ATCm_sTableNameNow=pText-GetValue().Trim();if (m_sTableNameNow!=)FindTableByName(m_sTableNameNow);/更改选择的报表后,更新相应的已选框和待选框中的内容UpdateReportTable();下面是另一篇文档一 使用前的准备1 新建一个基于对话框的MFC程序ReportControlTest。2 添加对XT Toolkit Pro 的引用。添加对头文件“XTToolkitPro.h”的引用。假设Xtreme ToolkitPro的目录下的源文件夹的路径为“D:SoftwareSoftware Developmentvs6.0Xtreme ToolkitPro v11.2.2-srcSource”,该目录下包含有文件“XTToolkitPro.h”和其他的一些源文件,然后右键单击工程ReportControlTest弹出右键菜单,选择Settings-c/c+-Catrgory:Preprocessor-Additional include directories: “D:SoftwareSoftware Developmentvs6.0Xtreme ToolkitPro v11.2.2-srcSource”。然后在StdAfx.h文件中添加对文件“XTToolkitPro.h”的引用,如:#include / Codejock Software Components在XTToolkitPro.h中包含了其他所有的.h头文件的调用,如#if defined(_XTP_INCLUDE_DEPRECATED)#include Common/XTPDeprecated.h#endif#if !defined(_XTP_EXCLUDE_COMMON)#include Common/Includes.h / _XTP_INCLUDE_COMMON#endif。3 添加对.lib文件的调用假设在debug 下需要ToolkitPro1122vc60D.lib 文件在“D:SoftwareSoftware Developmentvs6.0Xtreme ToolkitPro v11.2.2-srclibvc60” 下,那么给工程添加lib路径:Settings-Link- Additional library path directories: “D:SoftwareSoftware Developmentvs6.0Xtreme ToolkitPro v11.2.2-src libvc60”,在XTToolkitPro.h文件中添加了对该Lib文件的调用。4 将ToolkitPro1122vc60D.dll拷到当前exe文件目下下,如debug文件夹下。5 运行程序,如果出现编译错误:atal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit,这是因为内存不够。/Zm指定预编译头的内存分配限制,可以修改内存分配。Settings-c/c+-project options: 在最后有/c,在/c前添加一个/Zm200,200指定分配内存是100M。6. 在窗体IDD_REPORTCONTROLTEST_DIALOG上添加一个 Custom Control设置其属性如下:ID: IDC_REPORTCTRLClass: XTPReport (此处一定要添加)7. 在源文件中将控件IDC_REPORTCTRL与实际的ReportControl 绑定。注意,由于在ClassWizard中不能识别CXTPReportControl类,所以必须手动修改。a. 给窗体类添加一个CXTPReportControl类的变量 m_wndReportCtrl;如在ReportControlTestDlg.h头文件中添加如下:/AFX_DATA(CReportControlTestDlg)enum IDD = IDD_REPORTCONTROLTEST_DIALOG ;/ NOTE: the ClassWizard will add data members hereCXTPReportControl m_wndReportCtrl;/AFX_DATAb. 将控件IDC_REPORTCTRL与变量m_wndReportCtrl 绑定,有两种方法:(1)在ReportControlTestDlg.cpp文件的DoDataExchange()中修改如下:void CReportControlTestDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CReportControlTestDlg)/ NOTE: the ClassWizard will add DDX and DDV calls hereDDX_Control(pDX, IDC_REPORTCTRL, m_wndReportCtrl);/AFX_DATA_MAP(2)采用SubclassDlgItem子类化一个控件,将派生类的控件对象与对话框中的基类控件相连接m_wndReportCtrl.SubclassDlgItem(IDC_REPORTCTRL, this);/SubclassDlgItem子类化一个控件,将派生类的控件对象与对话框中的基类控件相连接8. 开始使用m_wndReportCtrl。下面是另一篇文章一CXTPReportControl的Data Members(Protected:m_)(Xtreme Toolkit Pro v12.0-Report Control-Classes-CXTPReportControl Class-CXTPReportControl Data Members)classCXTPReportControl:publicCWnd;The CXTPReportControl class provides an implementation of the Report control.二CXTPReportControl相关的几个Classes(Xtreme Toolkit Pro v12.0- Report Control-Classes- CXTPReportControl Class)classCXTPReportColumn;Represents report column item with its properties and operations.CXTPReportColumn* CXTPReportControl:GetFocusedColumn()const;classCXTPReportColumns;This class is a collection of report columns objects, each of which can be referred to by its zero-based index.CXTPReportColumns* CXTPReportControl:GetColumns()const;classCXTPReportHeader;A report header is a part of the report window positioned above columns of text or numbers. It contains a title for each column, and it can be divided into parts. The user can drag the dividers that separate the parts to set the width of each column.CXTPReportHeader* CXTPReportControl:GetReportHeader()const;classCXTPReportRecordCXTPReportRecord represents a collection of objects ofCXTPReportRecordItemor objects of classes that are children ofCXTPReportRecordItem. A collection of such items is one record in ReportControl list. You create an object of CXTPReportRecord by simply calling constructor. After it you can add items to the record.classCXTPReportRecordItemClass for working with single list cell. Base class for extended list cells. It determines the behavior of all specific record items. You dont use its class directly in the control. If you wish to add your own Record Item to the control, you must inherit it from CXTPReportRecordItem. Most member functions in this class are virtual.classCXTPReportRecordItemText:publicCXTPReportRecordItem;This Class represents a text-only cell and inherits basic functionality fromCXTPReportRecordItemclass. You create a text record item simply by calling a constructor with one parameter - text stringclassCXTPReportRecordsThis class represents a records collection class. It supports an array ofCXTPReportRecordpointers.CXTPReportRecords* CXTPReportControl:GetFooterRecords()const;CXTPReportRecords* CXTPReportControl:GetHeaderRecords()const;CXTPReportRecords* CXTPReportControl:GetRecords()const;classCXTPReportRowCXTPReportRow class represents an row of the report control window.CXTPReportRow* CXTPReportControl:GetFocusedRow()const;classCXTPReportRowsThis class represents a rows collection class. It supports an array ofCXTPReportRowpointers.CXTPReportRows* CXTPReportControl:GetFooterRows()const;CXTPReportRows* CXTPReportControl:GetHeaderRows()const;CXTPReportRows* CXTPReportControl:GetRows()const;classCXTPReportSelectedRows;Encapsulates a collection ofCXTPReportRowpointers that represent the selected rows in a Report Control.CXTPReportSelectedRows* pSelRows = pReportControl-GetSelectedRows();三在CXTPReportControl增加记录示例CXTPReportControlm_wndReportCtrl;(1)add 3 columns,set column headerfor(i= 0;i 3;i+)CStringstrName;strName.Format(_T(Column %d),i+ 1);m_wndReportCtrl.AddColumn(newCXTPReportColumn(i,strName, 280);(2)adds 4 empty records to a report controlfor(i=0;iAddItem(newCXTPReportRecordItemText(“item1”)pRecord-AddItem(newCXTPReportRecordItemText(“item2”)pRecord-AddItem(newCXTPReportRecordItemText(“item3”)CXTPReportRecord*pRecord=m_wndReportCtrl.AddRecord(pRecord);四CXTPReportControl的事件响应(消息宏参见Xtreme Toolkit Pro v12.0- Report Control-Macros)在CXTPReportControl的消息处理中也有类似ClistView中NM_LISTVIEW结构的XTP_NM_REPORTRECORDITEM结构:XTP_NM_REPORTRECORDITEMStructureThis structure is sent to Main window in a WM_NOTIFY message from Item and provides all parameters that are needed in processing control specific notifications by the main windowstructXTP_NM_REPORTRECORDITEM NMHDRhdr;CXTPReportRow*pRow;CXTPReportRecordItem*pItem;CXTPReportColumn*pColumn;intnHyperlink;POINT pt;XTPReportRecordItem.h对比CXTPReportControl:SendMessageToParent与XTP_NM_REPORTRECORDITEM结构的参数:CXTPReportControl:SendMessageToParentMethodNotifies parent control of some event that has happened.LRESULTSendMessageToParent(CXTPReportRow*pRow,CXTPReportRecordItem*pItem,CXTPReportColumn*pColumn,UINTnMessage,CPoint*pPoint,intnHyperlink= -1)const;五CXTPReportControl的事件处理示例/ListFrame.h消息响应函数声明afx_msgvoidOnReportSortOrderChanged(NMHDR*pNMHDR,LRESULT*pResult);afx_msgvoidOnReportColumnRClick(NMHDR*pNMHDR,LRESULT*pResult);afx_msgvoidOnReportLButtonDown(NMHDR*pNMHDR,LRESULT*pResult);/ListFrame.cpp消息映射注意包含#includeXTPReportDefines.h消息宏在此文件中定义/XTP_NM_REPORT_SORTORDERCHANGED消息ON_NOTIFY(XTP_NM_REPORT_SORTORDERCHANGED,A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西贺州市中小学(幼儿园)教师公开招聘更正岗位计划表相关的模拟试卷附答案详解(模拟题)
- 给水工程规划与设计方案
- 热力配电网络建设方案
- 2025滇西科技师范学院公开招聘硕士研究生及以上和“双师型”教师(19人)考前自测高频考点模拟试题及1套完整答案详解
- 给水工程设计方案
- 2025年食品销售初级考试试题及答案
- 水泥物检考试试题及答案
- 自来水厂工程技术方案
- 方便面生产设备采购与安装方案
- 2025昆明市滇池国家旅游度假区消防救援大队政府专职消防队员招聘(7人)模拟试卷及参考答案详解一套
- 2024年河南郑州高新区招聘社区工作人员笔试真题
- 财务部门增值税发票管理操作手册
- 完整版消防应急预案范本三篇
- 算力经济发展研究报告(2025年)
- 2025版静脉输液治疗实践指南
- 骨科术后并发肺栓塞护理
- GB/T 18268.21-2025测量、控制和实验室用的电设备电磁兼容性要求第21部分:特殊要求无电磁兼容防护场合用敏感性试验和测量设备的试验配置、工作条件和性能判据
- 人教PEP版(2024)2025-2026学年英语四年级上学期期中测试卷(含答案)
- 2025年融媒体中心招聘考试笔试试题(60题)含答案
- 滑雪场造雪培训课件模板
- 社区工作者网格员考试题库及答案
评论
0/150
提交评论