如何把列表控件里的内容打印出来

时间:2022-09-24 14:28:49
参数:列表控件变量命 m_list
      按钮void CDialogC5::OnButton1() {}

我把数据库里的数据读到列表控件中(列表控件以报告方式显示数据)
如:
ID号    时间        数量 
100   2011-7-30     20
101   2011-8-21     30

我想搞一个按钮可以把列表控件里的内容打印出来。
求高人指点!!!
我是菜鸟,最好有完整的代码。

5 个解决方案

#1


首先在相应的Update函数中创建列表的内容,代码为
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list.InsertColumn(0,_T("ID号"),LVCFMT_CENTER,80);
m_list.InsertColumn(1,_T("时间"),LVCFMT_CENTER,100);
m_list.InsertColumn(2,_T("数量LVCFMT_CENTER,100);(后边数字为相应列表的宽度,可根据需要自行设置)
//读取数据库中列表数据(使用的是本地数据库)

pConn = OpenLocalDB();
_RecordsetPtr  pPtr;
if (IsOpened(pConn))
{
pPtr=Query(pConn ,L"*",L"aaa");(aaa为数据库中存放数据的表名)
_variant_t bb;
_variant_t cc;
_variant_t dd;(bb cc dd均为定义存放数据变量)
while(!pPtr->GetrsEOF())  
{
bb= pPtr->GetCollect ("bbb");
cc= pPtr->GetCollect ("ccc");
dd= pPtr->GetCollect ("ddd");(bbb ccc ddd为数据库中存放相应数据的变量名)
CString b((char*)_bstr_t(bb));
CString c((char*)_bstr_t(cc));
CString d((char*)_bstr_t(dd));
b.TrimRight();
c.TrimRight();
d.TrimRight();

int nCount = m_list.GetItemCount();  
CString sIntem;
sIntem.Format(_T("%d"),nCount + 1);
m_list.InsertItem (nCount,sIntem);
m_list.SetItemText (nCount,1,b);
m_list.SetItemText (nCount,2,c);
m_list.SetItemText (nCount,3,d);
pPtr->MoveNext();
            if (pPtr != NULL)
    CloseRst(pPtr);
    CloseConn(pConn);(关闭数据库)
上述程序为读取数据库中数据并添加到列表控件

#2


void CDialogC5::OnButton1() {}
在这个函数中将update设置为true便可现实数据库中内容
要打印要相应添加打印控件PrintDoocument,设置其相应属性,剩下的代码就简单了,自己写吧

#3


我的意思是在打印机里打印出来,我的数据已经在列表控件中显示了。

当我点击OnButton1的时间打印机就打印列表控件里的数据。

二楼的“打印要相应添加打印控件PrintDoocument,设置其相应属性”似乎靠谱,不过还是不会用。。。

那位高人指点一下,最好有详细代码。万分感谢!!

#4


楼主会用DC之类的东西吗?
给你一个打印机dc,你可以在上面使用DrawText函数画你的文字。一行行画吧,下面就是打印机DC。接着:

for(int i=0;i<nCopy;i++)
{
//*nResult = m_dlg->PrintPaper();
//if(*nResult==0)
// break;
char   szprinter[80];    
char   *szDevice,*szDriver,*szOutput;    
HDC   hdcprint;   //   定义一个设备环境句柄    

//定义一个打印作业  
static   DOCINFO   di={sizeof(DOCINFO),"printer",NULL};    
//得到设备字符串存入数组szprinter中    
GetProfileString("windows","device",",,,",szprinter,80);    
//   将设备字符串分解    
if(NULL!=(szDevice=strtok(szprinter,","))&& NULL!=(szDriver=strtok(NULL,","))&& NULL!=(szOutput=strtok(NULL,",")))    
{
//   创建一个打印机设备句柄    
if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)    
{    
int WID = GetDeviceCaps(hdcprint,HORZRES);
int HEG = GetDeviceCaps(hdcprint,VERTRES);

if(StartDoc(hdcprint,&di)>0)   //开始执行一个打印作业    
{    

EndDoc(hdcprint);   //结束一个打印作业    
}    
//   用API函数DeleteDC销毁一个打印机设备句柄    
DeleteDC(hdcprint);    
*nResult = 2;
return S_OK;
}
else 
{    
MessageBox("没有默认打印机,或者没有安装打印机!");    
*nResult = 1;
return S_OK; 


}
else
{
*nResult =  0;
}
}

#5


“结束一个打印作业”代码之上那行就是你写字画画的位置。有hdc还有坐标。多好画啊。画去吧。就跟在窗体上画画一样

#1


首先在相应的Update函数中创建列表的内容,代码为
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list.InsertColumn(0,_T("ID号"),LVCFMT_CENTER,80);
m_list.InsertColumn(1,_T("时间"),LVCFMT_CENTER,100);
m_list.InsertColumn(2,_T("数量LVCFMT_CENTER,100);(后边数字为相应列表的宽度,可根据需要自行设置)
//读取数据库中列表数据(使用的是本地数据库)

pConn = OpenLocalDB();
_RecordsetPtr  pPtr;
if (IsOpened(pConn))
{
pPtr=Query(pConn ,L"*",L"aaa");(aaa为数据库中存放数据的表名)
_variant_t bb;
_variant_t cc;
_variant_t dd;(bb cc dd均为定义存放数据变量)
while(!pPtr->GetrsEOF())  
{
bb= pPtr->GetCollect ("bbb");
cc= pPtr->GetCollect ("ccc");
dd= pPtr->GetCollect ("ddd");(bbb ccc ddd为数据库中存放相应数据的变量名)
CString b((char*)_bstr_t(bb));
CString c((char*)_bstr_t(cc));
CString d((char*)_bstr_t(dd));
b.TrimRight();
c.TrimRight();
d.TrimRight();

int nCount = m_list.GetItemCount();  
CString sIntem;
sIntem.Format(_T("%d"),nCount + 1);
m_list.InsertItem (nCount,sIntem);
m_list.SetItemText (nCount,1,b);
m_list.SetItemText (nCount,2,c);
m_list.SetItemText (nCount,3,d);
pPtr->MoveNext();
            if (pPtr != NULL)
    CloseRst(pPtr);
    CloseConn(pConn);(关闭数据库)
上述程序为读取数据库中数据并添加到列表控件

#2


void CDialogC5::OnButton1() {}
在这个函数中将update设置为true便可现实数据库中内容
要打印要相应添加打印控件PrintDoocument,设置其相应属性,剩下的代码就简单了,自己写吧

#3


我的意思是在打印机里打印出来,我的数据已经在列表控件中显示了。

当我点击OnButton1的时间打印机就打印列表控件里的数据。

二楼的“打印要相应添加打印控件PrintDoocument,设置其相应属性”似乎靠谱,不过还是不会用。。。

那位高人指点一下,最好有详细代码。万分感谢!!

#4


楼主会用DC之类的东西吗?
给你一个打印机dc,你可以在上面使用DrawText函数画你的文字。一行行画吧,下面就是打印机DC。接着:

for(int i=0;i<nCopy;i++)
{
//*nResult = m_dlg->PrintPaper();
//if(*nResult==0)
// break;
char   szprinter[80];    
char   *szDevice,*szDriver,*szOutput;    
HDC   hdcprint;   //   定义一个设备环境句柄    

//定义一个打印作业  
static   DOCINFO   di={sizeof(DOCINFO),"printer",NULL};    
//得到设备字符串存入数组szprinter中    
GetProfileString("windows","device",",,,",szprinter,80);    
//   将设备字符串分解    
if(NULL!=(szDevice=strtok(szprinter,","))&& NULL!=(szDriver=strtok(NULL,","))&& NULL!=(szOutput=strtok(NULL,",")))    
{
//   创建一个打印机设备句柄    
if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)    
{    
int WID = GetDeviceCaps(hdcprint,HORZRES);
int HEG = GetDeviceCaps(hdcprint,VERTRES);

if(StartDoc(hdcprint,&di)>0)   //开始执行一个打印作业    
{    

EndDoc(hdcprint);   //结束一个打印作业    
}    
//   用API函数DeleteDC销毁一个打印机设备句柄    
DeleteDC(hdcprint);    
*nResult = 2;
return S_OK;
}
else 
{    
MessageBox("没有默认打印机,或者没有安装打印机!");    
*nResult = 1;
return S_OK; 


}
else
{
*nResult =  0;
}
}

#5


“结束一个打印作业”代码之上那行就是你写字画画的位置。有hdc还有坐标。多好画啊。画去吧。就跟在窗体上画画一样