MFC ListBox控件用法介绍
listbox使用说明

listbox使用说明摘要:1.介绍Listbox的基本概念2.Listbox的使用场景3.Listbox的功能特点4.操作Listbox的步骤和方法5.注意事项和技巧正文:Listbox是一种常用的用户界面元素,它是一个下拉列表,用户可以在其中选择预定义的项目。
Listbox的使用场景非常广泛,例如在表单中让用户选择兴趣爱好、输入密码、选择所在地区等。
本文将详细介绍如何使用Listbox,以及一些实用技巧。
一、Listbox的基本概念Listbox是一种交互式控件,它允许用户从一系列选项中选择一个或多个项目。
Listbox通常与其他控件(如按钮)结合使用,以触发某种操作或提交选择。
在Listbox中,选中的项目会高亮显示,以表示用户的选择。
二、Listbox的使用场景1.表单填写:在表单中使用Listbox让用户选择预定义的选项,如性别、年龄、职业等。
2.数据筛选:在数据处理和分析场景中,使用Listbox让用户选择特定的数据范围或条件。
3.配置设置:在应用程序的设置界面中,使用Listbox让用户选择喜欢的主题、语言等。
4.组合查询:在搜索或查询界面中,使用Listbox让用户选择多个关键词进行组合查询。
三、Listbox的功能特点1.多项选择:Listbox允许用户选择一个或多个项目。
2.动态调整:可以根据需要添加、删除或修改列表项。
3.数据绑定:可以与后台数据进行绑定,实时更新列表内容。
4.样式定制:可以自定义Listbox的样式,如字体、颜色、边框等。
四、操作Listbox的步骤和方法1.初始化Listbox:在HTML中创建一个Listbox控件,定义其属性(如数据源、样式等)。
2.绑定数据:使用JavaScript或背后语言将后台数据与Listbox绑定,实现数据同步。
3.响应用户选择:为Listbox添加事件监听器,如onchange事件,当用户选择项目时触发相应操作。
4.展示选中项:根据用户选择,展示相关信息或执行相应操作。
VC MFC列表框(CListBox)控件

列表框控件简单应用重复性的过程我就不详细讲明了,只给出类里面函数的解释。
int CListBox::AddString( LPCTSTR lpszItem );//添加一个项,lpszItem是项文本内容int CListBox::InsertString( int nIndex, LPCTSTR lpszItem );//同上,只不过这个可以指定项位置(索引),由参数nIndex指定int CListBox::GetCurSel( ) const;//获取当前选中项的索引,函数返回索引值int CListBox::GetText( int nIndex,CString &rString ) const;//根据索引获得项文本int CListBox::GetCount( ) const;//获取项数量void CListBox::ResetContent( );//删除列表框所有的项int CListBox::DeleteString( UINT nIndex );//根据项索引从列表框删除一个项int CListBox::SetItemHeight( int nIndex, UINT cyItemHeight );//设置一个项的高度,注意:列表框具有//LBS_OWNERDRAWVARIABLE风格才可以单独设置一个项的高度,否则是所有项的高度自绘列表框这里自绘要达到的效果,就是简单模仿一下QQ界面里类似列表框控件的那种效果,先往对话框里添加列表框控件.然后再改一下列表框的属性,所有者绘制项选择固定,有字符串前面打上勾.接着准备两张位图,一张用于列表框的背景,一张用于项选中时的背景,ID号分别为:IDB_BK、IDB_SELECTED如下两张位图:再导入五张位图(QQ头像),ID号保持默认不变。
从CListBox派生出子类CNewListBox,往CNewListBox添加一个函数,用于画位图,函数如下:void CNewListBox::DrawBK(CDC *pDC, CRect rect, UINT uIDBK){CDC memDC;memDC.CreateCompatibleDC(pDC);//兼容DCCBitmap bmp;bmp.LoadBitmap(uIDBK);//加载位图BITMAP bmpInfo;bmp.GetBitmap(&bmpInfo);//获取位图信息memDC.SelectObject(&bmp);//选入位图pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);bmp.DeleteObject();memDC.DeleteDC();}然后给CNewListBox添加WM_ERASEBKGND消息处理函数,这个消息是系统擦除背景时产生。
wpf listbox控件的用法

wpf listbox控件的用法WPF Listbox控件的用法:WPF中的Listbox控件是一种用于展示数据项列表的常用控件。
它允许用户从一个选项集合中选择一个或多个项目,同时还具有高度的可定制性。
1. 绑定数据源:要使用Listbox控件,首先需要将数据源绑定到Listbox上。
可以使用ItemsSource属性将集合或数据源分配给Listbox。
例如,可以将一个ObservableCollection<T>或List<T>对象分配给ItemsSource属性。
2. 定制外观:Listbox控件允许开发者自定义项的外观。
可以使用ItemTemplate 属性为每个数据项定义一个自定义的数据模板,用于控制数据的展示方式。
这使得我们可以自由控制每行数据的布局、样式和格式化。
3. 多选模式:Listbox控件还提供了多种选择模式,根据需求可以选择单选或多选模式。
可以使用SelectionMode属性来设置选择模式为Single、Multiple或Extended,决定用户能够选择多少个项目。
4. 交互功能:Listbox控件提供了一些交互功能,例如可以通过设置IsEnabled属性来启用或禁用控件,也可以通过设置IsEditable属性来允许用户直接在Listbox中编辑选项。
5. 事件处理:通过订阅相关事件,可以为Listbox控件提供更多的交互功能。
例如,可以使用SelectionChanged事件来响应用户选择的改变,或者使用PreviewMouseDoubleClick事件来处理用户双击某个项的操作。
总结:WPF Listbox控件是一个功能强大、高度可定制的控件,用于展示和交互数据项列表。
通过绑定数据源、定制外观、选择模式设置、交互功能和事件处理,可以满足各种不同的需求。
第5讲 列表控件

第五讲列表控件本讲主要介绍组合框(Combo Box)控件和列表框(List Box)控件的的使用方法。
一.创建一个基于对话框的应用程序模板1.选择应用程序类型:选择“File\New”菜单→在弹出的“New”对话框的选择“Projects”选项卡→应用程序类型选择“MFC AppW izard(exe)”→“Projectname”编辑框中输入“ListBox”→“Location”编辑框中输入适当的路径→单击“OK”2.选择项目类型在“MFC AppWizar – Step 1”对话框中“Dialog based”单选钮→单击“Finish”按钮。
二.修改对话框模板把主对话框模板修改成如下图所示:图6-11.增加“编号”、“姓名”、“出生年月”、“性别”、“职称”和“职工情况列表”等六个静态文本2.在“编号”右侧增加一个下沉风格的静态文本,资源符号为:IDC_NUMBER 在“Styles”选项卡的“Center-vertically”复选钮:选中3.在“姓名”和“出生年月”右侧,增加二个编辑框,资源符号分别为:IDC_NAME, IDC_BIRTHDAY4.在“性别”和“职称”右侧,增加二个组合框,资源符号分别命名为:IDC_SEX 在Combo Box Properties对话框的styles选项卡的type下拉列表框中选择Drop List注:Drop List选项不允许组合框编辑输入IDC_TITLE 在Combo Box Properties对话框的styles选项卡的type下拉列表框中选择Drop List注:Dropdown选项允许组合框编辑输入5.增加“添加”、“删除当前选定行”和“在选定行前插入”三个按钮,ID 值命名为:IDC_ADD, IDC_DELETE, IDC_INSERT6.在“职工情况列表”的下方,增加一个列表控件”List Control”:在”List Control Properties”对话框中如下设置:A.在General选项卡的ID组合框中输入:IDC_LISTB.在Styles选项卡中选择:“V iew:”下拉列表框:Report“Align:”下拉列表框:Top“Sort:”下拉列表框:Ascending“Single selection”复选框:选中三.为控件连接变量为各控件连接的变量名及其值类型和变量类型如下(连接方法前已述):控件ID 变量名变量类别变量类型IDC_NUMBER m_nNumber value CStringIDC_NAME m_sName value CStringIDC_BIRTHDAY m_sBirthday value CStringIDC_SEX m_nSex valve intm_cSex Control CComboBoxIDC_TITLE m_sT itle value CStringm_cT itle Control CComboBoxIDC_LIST m_cList Control CListBox 注:IDC_TITLE组合框控件上各连连接了两个变量,它们值类型分别为value 和Control,连接方法是对同一个控件ID,两次使用“Add Variables…”即可。
listbox使用说明

listbox使用说明摘要:1.Listbox简介与用途2.Listbox的常用属性和方法3.Listbox在Python中的使用示例4.实战应用:制作简单的选择题5.总结与建议正文:Listbox是Python中的一种控件,主要用于展示一系列选项供用户选择。
它在Python的图形界面编程中有着广泛的应用,尤其在制作选择题、问卷调查等场景中显得尤为实用。
接下来,我们将详细介绍Listbox的常用属性和方法,并通过实例演示其在实际应用中的使用。
一、Listbox简介与用途Listbox(列表框)是一种下拉式选择框,用户可以在其中选择一个或多个选项。
在Python中,Listbox常用于以下场景:1.展示一系列选项,如菜单、选项卡等。
2.制作选择题,便于统计答案。
3.收集用户反馈,如问卷调查。
二、Listbox的常用属性和方法1.属性和方法简介Listbox控件有以下几个常用的属性和方法:- name:设置列表框的名称。
- size:设置列表框中显示的项目数量。
- selectmode:设置列表框的选型模式,如single(单选)、multiple (多选)等。
- insert(索引,项):在指定索引处插入一项。
- delete(索引):删除指定索引处的项。
- get(索引):获取指定索引处的项。
- set(索引,项):设置指定索引处的项。
2.常用属性和方法详解- name:设置列表框的名称,方便在代码中引用。
例如,lb =Listbox(name="选项框")。
- size:设置列表框中显示的项目数量。
例如,lb.config(size=5)表示列表框最多显示5个项目。
- selectmode:设置列表框的选型模式。
如lb.config(selectmode=tk.SINGLE)表示设置为单选模式。
- insert(索引,项):在指定索引处插入一项。
例如,lb.insert(0, "选项1")表示在列表框开头插入“选项1”。
mfc之ListBox介绍

mfc之ListBox介绍ListBox窗口用来列出一系列的文本,每条文本占一行。
创建一个列表窗口可以使用成员函数:BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。
LBS_MULTIPLESEL 指明列表框可以同时选择多行LBS_EXTENDEDSEL 可以通过按下Shift/Ctrl键选择多行LBS_SORT 所有的行按照字母顺序进行排序在列表框生成后需要向其中加入或是删除行,可以利用:int AddString( LPCTSTR lpszItem )添加行,int DeleteString( UINT nIndex )删除指定行,int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。
void ResetContent( )可以删除列表框中所有行。
通过调用int GetCount( )得到当前列表框中行的数量。
如果需要得到/设置当前被选中的行,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。
如果你指明了选择多行的风格,你就需要先调用int GetSelCount( )得到被选中的行的数量,然后int GetSelItems( int nMaxItems, LPINT rgIndex )得到所有选中的行,参数rgIndex为存放被选中行的数组。
通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。
此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
MFC ListBox控件用法介绍

MFC CListCtrl 使用介绍列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:∙LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示∙LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
∙LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点∙LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用int InsertItem( int nItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);可以插入列。
MFCListBox控件使用方法总结

MFCListBox控件使⽤⽅法总结MFC中listbox控件是为了显⽰⼀系列的⽂本,每个⽂本占⼀⾏。
Listbox控件可以设置属性为:LBS_CHILD :(默认)⼦窗⼝LBS_Visible :(默认)可视LBS_Multiplesel :可选择多⾏LBS_Extendedsel :可以使⽤shift或ctrl选择多⾏LBS_SORT:所有⾏按字母顺序进⾏排序对Listbox进⾏操作:Intlistbox.AddString ( LPCTSTR Str) :对listbox的⾸⾏添加⼀个str的⽂本⾏,即此时nIndex为0;Intlistbox.DeleteString (uint nIndex) :删除listbox中第nIndex⾏的⽂本⾏,注意nIndex是从0起始的;intlistbox.InsertString (uint xIndex, LPCTSTR Str):在listbox中第nIndex⾏插⼊⼀个str的⽂本⾏;Int listbox.GetCount ( ):获取listbox的⾏的总数⽬;Int listbox.GetCurSel ( ):得到listbox选中的⽂本⾏的⾏数。
Void listbox.ResetContent ( ):清除listbox中的所有数据;Intlistbox.GetCurCount ( ):获取listbox被选中的⾏的数⽬;Intlistbox.FindString ( int nstart , LPCTSTR Str ):从第nstart⾏开始起进⾏查找,查找Str的⽂本⾏;Intlistbox.SelectString ( int nstart, LPCTSTR Str ) :从第nstart⾏开始,选择包含Str字符串的那⼀⾏;对Listbox中某⼀⾏进⾏双击操作,要产⽣⼀个响应函数的步骤:在BEGIN_MESSAGE_MAP()END_MESSAGE_MAP()之间添加响应函数的消息映射,如函数名为C**Dlg::OnLbnDblClk,添加下⾯代码ON_LBN_DBLCLK(IDC_LIST1,&C**Dlg::OnLbnDblClk)//IDC_LIST1为listbox控件的ID然后在C**Dlg.h中添加函数OnLbnDblClk()的声明最后在C**Dlg::OnLbnDblClk()函数中添加实现代码即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用?BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:•LVS_ICONLVS_SMALLICONLVS_LISTLVS_REPORT这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示•LVS_EDITLABELS结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
•LVS_SHOWSELALWAYS在失去焦点时也显示当前选中的结点•LVS_SINGLESEL同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:?CImageList*SetImageList(CImageList*pImageList,LVSIL_NORMAL);?如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:?CImageList*SetImageList(CImageList*pImageList,LVSIL_SMALL);通过调用intInsertItem(intnItem,LPCTSTRlpszItem);可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn(intnCol,LPCTSTRlpszColumnHeading,intnFormat,intnWidth,intnS ubItem);可以插入列。
iCol为列的位置,从零开始,lpszColumnHeading为显示的列名,nFormat为显示对齐方式,nWidth为显示宽度,nSubItem为分配给该列的列索引。
在有多列的列表控件中就需要为每一项指明其在每一列中的显示字符,通过调用?BOOLSetItemText(intnItem,intnSubItem,LPTSTRlpszText);可以设置每列的显示字符。
nItem为设置的项的位置,nSubItem为列位置,lpszText为显示字符。
下面的代码演示了如何设置多列并插入数据:(&m_listSmall,LVSIL_SMALL);.)(LPSTR_TEXTCALLBACK,...)置listctrl风格及扩展风格LONGlStyle;?lStyle.=GetWindowLong,GWL_STYLE);=~LVS_TYPEMASK;=LVS_REPORT;();?dwStyle.|=LVS_EX_FULLROWSELECT;=LVS_EX_GRIDLINES;=LVS_EX_CHEC KBOXES;入数据(0,"ID",LVCFMT_LEFT,40);直选中item选中style中的Showselectionalways,或者在上面第2点中设置LVS_SHOWSELALWAYS5.选中和取消选中一行intnIndex=0;?到listctrl中所有行的checkbox的状态(LVS_EX_CHECKBOXES);?CStringstr;?for(inti=0;i<();i++)?{?if(i,LVIS_SELECTED)==LVIS_SELECTED||(i))?{?(_T("第%d行的checkbox为选中状态"),i);?AfxMessageBox(str);?}?}7.得到listctrl中所有选中行的序号方法一:?CStringstr;?for(inti=0;i<();i++)?{?if(i,LVIS_SELECTED)==LVIS_SELECTED)?{?(_T("选中了第%d行"),i);?AfxMessageBox(str);?}?}方法二:?POSITIONpos=();?if(pos==NULL)?TRACE0("Noitemswereselected!\n");?else?{?while(pos)?{?intnItem=(pos);?TRACE1("Item%dwasselected!\n",nItem);?到item的信息TCHARszBuf[1024];?LVITEMlvi;?=nItemIndex;?=0;?=LVIF_TEXT;?=szBuf;?=1024;?(&lvi);关于得到设置item的状态,还可以参考msdn文章?Q173242:UseMaskstoSet/GetItemStatesinCListCtrl?9.得到listctrl的所有列的header字符串内容LVCOLUMNlvcol;?charstr[256];?intnColNum;?CStringstrColumnName[4];listctrl中一项可见,即滚动滚动条(i,FALSE);11.得到listctrl列数intnHeadNum=()->GetItemCount();12.删除所有列方法一:?while(0))?因为你删除了第一列后,后面的列会依次向上移动。
方法二:?intnColumns=4;?for(inti=nColumns-1;i>=0;i--)?(i);13.得到单击的listctrl的行列号添加listctrl控件的NM_CLICK消息相应函数?voidCTest6Dlg::OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)?{?断是否点击在listctrl的checkbox上添加listctrl控件的NM_CLICK消息相应函数?voidCTest6Dlg::OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)?{?DWORDdwPos=GetMessagePos();?CPointpoint(LOWORD(dwPos),HIWORD(dwPos));?(&point);?LVHITTESTINFOlvinfo;?=point;?=LVHT_ABOVE;?UINTnFlag;?intnItem=(point,&nFlag);?键点击listctrl的item弹出菜单添加listctrl控件的NM_RCLICK消息相应函数?voidCTest6Dlg::OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult)?{?NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;?if(pNMListView->iItem!=-1)?{?DWORDdwPos=GetMessagePos();?CPointpoint(LOWORD(dwPos),HIWORD(dwPos));?CMenumenu;?VERIFY(IDR_MENU1));?CMenu*popup=(0);?ASSERT(popup!=NULL);?popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,,,this);?}?*pResult=0;?}切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序添加listctrl控件的LVN_ITEMCHANGED消息相应函数?voidCTest6Dlg::OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult)?{?NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;?到另一个进程里的listctrl控件的item内容18.选中listview中的itemQ131284:HowToSelectaListviewItemProgrammatically?19.如何在CListView中使用CListCtrl的派生类的subitem添加图标(LVS_EX_SUBITEMIMAGES);?(..);CListCtrl显示文件,并根据文件类型来显示图标网上找到的代码,share?BOOLCTest6Dlg::OnInitDialog()?{?CDialog::OnInitDialog();?HIMAGELISThimlSmall;?HIMAGELISThimlLarge;?SHFILEINFOsfi;?charcSysDir[MAX_PATH];?CStringstrBuf;?memset(cSysDir,0,MAX_PATH);?GetWindowsDirectory(cSysDir,MAX_PATH);?strBuf=cSysDir;?sprintf(cSysDir,"%s",("\\")+1));?himlSmall=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,?0,?&sfi,?sizeof(SHFILEINFO),?SHGFI_SYSICONINDEX|SHGFI_SMALLICON);?himlLarge=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,?0,?&sfi,?sizeof(SHFILEINFO),?SHGFI_SYSICONINDEX|SHGFI_LARGEICON);?if(himlSmall&&himlLarge)?{?::SendMessage,LVM_SETIMAGELIST,?(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);?::SendMessage,LVM_SETIMAGELIST,?(WPARAM)LVSIL_NORMAL,(LPARAM)himlLarge);?}?returnTRUE;.?};zName);?charszAge[10];?sprintf(szAge,"%d",strAllData[i].iAge);?(i,1,szAge);??staticintCALLBACK?MyCompareProc(LPARAMlParam1,LPARAMlParam2,LPARAMlParamSort)?{?CListCtrl*pListCtrl=(CListCtrl*)lParamSort;?CStringstrItem1=pListCtrl->GetItemText(lParam1,0);?CStringstrItem2=pListCtrl->GetItemText(lParam2,0);returnstrcmp(strItem2,strItem1);?}voidsnip_CListCtrl_SortItems()?{?externCListCtrl*pmyListCtrl;pmyListCtrl->SortItems(MyCompareProc,(LPARAM)pmyListCtrl);?}Ifyoudon’twanttoallowtheuserstosortthelistbyclickingontheheader,,ifyoudowanttoall owsorting,,though,Step1:Addtwomembervariables?,.?intnSortedCol;?BOOLbSortAscending;Step2:Initializethemintheconstructor.?,thenthisvariableshouldreflectthat.?nSortedCol=-1;?bSortAscending=TRUE;?Step3:AddentryinmessagemaptohandleHDN_ITEMCLICK?ON_NOTIFY(HDN_ITEMCLICKA,0,OnHeaderClicked)?ON_NOTIFY(HDN_ITEMCLICKW,0,OnHeaderClicked)?Also,.Step4:WritetheOnHeaderClicked()function?Here’voidCMyListCtrl::OnHeaderClicked(NMHDR*pNMHDR,LRESULT*pResult)?{?HD_NOTIFY*phdn=(HD_NOTIFY*)pNMHDR;if(phdn->iButton==0)?{?LS)";ls",wnd);?if()==IDOK)?{?sExcelFile=();//要建立的Excel文件?CFileFindfinder;?BOOLbWorking=(sExcelFile);//寻找文件?if(bWorking)//如果已经存在文件,则删除?{?CFile::Remove((LPCTSTR)sExcelFile);?}?}?elsereturn;?TRY?{?//创建进行存取的字符串?("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREAT E_DB=\"%s\";DBQ=%s",sDriver,sExcelFile,sExcelFile);?//创建数据库(既Excel表格文件)?if(sSql,CDatabase::noOdbcDialog))?{?CHeaderCtrl*pHeader=();?//获得行,列的个数?intnColCount=pHeader->GetItemCount();?intnLineCount=();?intColOrderArray[100];?CStringca[100];?(ColOrderArray,nColCount);?//检索各列的信息,确定列标题的内容?for(inti=0;i<nColCount;i++)?{?LVCOLUMNlvc;?chartext[100];?=LVCF_TEXT|LVCF_SUBITEM;?=text;?=100;?(ColOrderArray[i],&lvc);?ca[i]=;?}?//创建表结构?CStringtempsql="(";?for(i=0;i<nColCount-1;i++)?{?tempsql+=ca[i];?tempsql+="TEXT,";?}?tempsql+=ca[nColCount-1];?tempsql+="TEXT)";?sSql="CREATETABLESheet1";?sSql+=tempsql;?(sSql);?//插入数据?intitem_count=();?tempsql="(";?for(i=0;i<nColCount-1;i++)?{?tempsql+=ca[i];?tempsql+=",";?}?tempsql+=ca[nColCount-1];?tempsql+=")";?for(intitemnum=0;itemnum<item_count;itemnum++){?sSql="";?sSql="INSERTINTOSheet1";?sSql+=tempsql;?sSql+="VALUES('";?for(i=0;i<nColCount-1;i++)?{?sSql+=(itemnum,i);?sSql+="','";?}?sSql+=(itemnum,nColCount-1);?sSql+="')";?(sSql);?}?}?//关闭数据库?();?AfxMessageBox("Excel文件写入成功!");?}?CATCH_ALL(e)?{?TRACE1("Excel驱动没有安装:%s",sDriver);?}?END_CATCH_ALL;?}。