导航:首页 > 使用方法 > clistview的使用方法

clistview的使用方法

发布时间:2022-11-19 14:20:07

⑴ VC中CFormView, CListView,CTreeView是什么

CFormView类是用于窗体视图的基类。一个窗体视图是包含控件的基本视图,这些控件以对话模板资源为基础被放置好。如果在应用中想使用窗体,则可用CFormView。这些视图使用CScrollView的功能,支持滚动

CListView类简化了列表控件和CListCtrl的使用。CListCtrl类按照MFC文档或视图结构封装了列表控件的功能。

在CTreeView类简化了使用树控制和CTreeCtrl,封装的类与MFC的文档视图结构树控制功能

⑵ mfc中GetItemtext , GetDlgItemText GetWindowText 的用法和区别

int GetDlgItemText( HWND hDlg , int nID, LPTSTR lpStr, int nMaxCount) const;
int GetDlgItemText( int nID, CString& rString) const;
通过ID获取控件的文字

GetWindowText是获取窗口的文字,如对话框的标题。

GetItemtext这个不是独立的函数,是CListCtr或者CListView的方法,获取列表框某项的文字。

⑶ MFC单文档应用CListView视图类问题

在CListView视图中响应菜单消息(即这里有一个菜单命令的监听),然后是dialog.DoMole,这里返回的时候就可以直接设置CListView中相关的内容了。

⑷ CListView的使用

在点击Clisview的响应事件里写上弹出对话框的代码

⑸ 请教CListView的具体用法,有实例代码最好

CListView用在文档视图结构中。用APPWIZARD 生成一个单文档的程序,有一个向导页,选中VIEW 从CListView派生。

1 。设定样式

void CIHISSERVERView::OnInitialUpdate()
{

CListView::OnInitialUpdate();

CListCtrl &m_list = GetListCtrl();

m_list.SetBkColor(RGB(242,251,255));

m_list.SetTextColor( RGB(12,26,234) );

m_list.InsertColumn(0 , "报警顺序号", LVCFMT_LEFT, 80, 0 );

m_list.InsertColumn(1 , "住宅编号", LVCFMT_LEFT, 80, 1 );

m_list.InsertColumn(2 , "所有者姓名", LVCFMT_LEFT, 80, 2 );

m_list.InsertColumn(3 , "手机号码", LVCFMT_LEFT, 100, 3 );

m_list.InsertColumn(4 , "住宅电话", LVCFMT_LEFT, 80, 4 );

m_list.InsertColumn(5 , "办公室电话", LVCFMT_LEFT, 80, 5 );

m_list.InsertColumn(6 , "使用者姓名", LVCFMT_LEFT, 80, 6 );
m_list.InsertColumn(7 , "手机号码", LVCFMT_LEFT, 100, 7 );

m_list.InsertColumn(8 , "住宅电话", LVCFMT_LEFT, 80, 8 );

m_list.InsertColumn(9 , "办公室电话", LVCFMT_LEFT, 80, 9);

m_list.InsertColumn(10, "主控器编号", LVCFMT_LEFT, 80, 10);
m_list.InsertColumn(11, "工作模式", LVCFMT_LEFT, 80, 11);

m_list.InsertColumn(12, "报警逻辑", LVCFMT_LEFT, 80, 12);

m_list.InsertColumn(13, "端口类型", LVCFMT_LEFT, 60, 13);

m_list.InsertColumn(14, "报警端口号", LVCFMT_LEFT, 80, 14);

m_list.InsertColumn(15, "报警路径", LVCFMT_LEFT, 140, 15);

m_list.InsertColumn(16, "报警时间", LVCFMT_LEFT, 160, 16);

m_list.ModifyStyle( LVS_TYPEMASK,LVS_REPORT | LVS_SINGLESEL );

m_list.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE );
}

2。鼠标右键单击ListView事件
// 鼠标右键单击事件,谈出控制菜单
void CIHISSERVERView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{

// TODO: Add your control notification handler code here

CListCtrl &m_list = GetListCtrl();

int nItemIndex = -1;

if ( ( m_list.GetNextItem(-1, LVNI_SELECTED))!=-1)

{

while ( ( nItemIndex = m_list.GetNextItem ( nItemIndex, LVNI_SELECTED ) ) != -1 )

{

CMenu menu;

menu.LoadMenu(IDR_MENU2);

CPoint point ;

::GetCursorPos(&point);

::SetForegroundWindow(m_hWnd);

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN ,

point.x,

point.y,

this,

NULL);

}

}

*pResult = 0;
}

3。在其他的类中向ListView插入数据

UINT CProcessAlarm:: dealwith( vector< UCHAR > &arr )
{

SumInBreakPath.Empty();
SumInBreakPaths.Empty();

CMainFrame *m_mainframe = (CMainFrame*)AfxGetMainWnd();

CIHISSERVERView *pview = (CIHISSERVERView*)m_mainframe -> GetActiveView();

CListCtrl &m_list =pview -> GetListCtrl();

。。。
m_list.SetTextColor(RGB(0,0,189));
m_list.SetTextBkColor(RGB(150,252,255));

m_list.InsertItem( ListCtrlIndex, AlarmNO );

m_list.SetItemText(ListCtrlIndex,1, (char*)HouseID );

if (OwnerName == "" )

m_list.SetItemText(ListCtrlIndex,2, "没有记录" );
else

m_list.SetItemText(ListCtrlIndex,2, OwnerName );

if ( OwnerMobilePhone == "" )

m_list.SetItemText(ListCtrlIndex,3, "没有记录" );

else

m_list.SetItemText(ListCtrlIndex,3, OwnerMobilePhone);

if (OwnerHomePhone == "")

m_list.SetItemText(ListCtrlIndex,4, "没有记录");

else

m_list.SetItemText(ListCtrlIndex,4, OwnerHomePhone);

if ( OwnerOfficePhone == "" )

m_list.SetItemText(ListCtrlIndex,5, "没有记录");
else

m_list.SetItemText(ListCtrlIndex,5, OwnerOfficePhone);

if ( ResidentName == "" )

m_list.SetItemText(ListCtrlIndex,6, "没有记录");

else

m_list.SetItemText(ListCtrlIndex,6, ResidentName );

if ( ResidentMobilePhone == "" )

m_list.SetItemText(ListCtrlIndex,7, "没有记录");

else

m_list.SetItemText(ListCtrlIndex,7, ResidentMobilePhone);

if ( ResidentHomePhone == "" )

m_list.SetItemText(ListCtrlIndex,8, "没有记录");

else

m_list.SetItemText(ListCtrlIndex,8, ResidentHomePhone);

if ( ResidentOfficePhone == "")

m_list.SetItemText(ListCtrlIndex,9, "没有记录");

else

m_list.SetItemText(ListCtrlIndex,9, ResidentOfficePhone);

m_list.SetItemText(ListCtrlIndex,10, ControllerID);

m_list.SetItemText(ListCtrlIndex,11, WorkModeName);

m_list.SetItemText(ListCtrlIndex,12, SumLogicName);

m_list.SetItemText(ListCtrlIndex,13, PortType);
m_list.SetItemText(ListCtrlIndex,14, AlarmPortNum);

m_list.SetItemText(ListCtrlIndex,15, inBreakPath);

m_list.SetItemText(ListCtrlIndex,16, Time);

// 使焦点始终在最后一行
int nCount = m_list.GetItemCount();

if (nCount > 0)

{

m_list.EnsureVisible(nCount-1, FALSE);

m_list.SetItemState(nCount-1, LVIS_SELECTED, LVIS_SELECTED);

if ( nCount-1 > 0 )

{

m_list.SetItemState(nCount-1-1, 0, LVIS_SELECTED);

}

}

m_list.SetFocus();

。。。。

如何锁定 ListView 的栏目头宽度

源码下载
ListView 及其 Column Header 实际上都是 Windows 通用控件(Comctl32.dll) 的一部分。所以查一查 MSDN 中与“Header Control”相关的控件资料不难发现,栏目头的锁定与否与几个 Windows 的通知消息密切相关,这几个消息分别是 HDN_TRACK、HDN_BEGINTRACK 和 HDN_ENDTRACKA。其中 HDN_BEGINTRACK 是本文要特别关照的一个。当用户在栏目头上拖拽鼠标时,如果位置正好在改变宽度的分割条上,则栏目头控件会向其父窗口发送一个 HDN_BEGINTRACK 通知消息。为了实现栏目头宽度的锁定,就必须搞掂这个通知消息。不能将它传递到父窗口,但是,这个消息与 Windows 中形形色色的其它通知消息一样,有两个版本:一个版本是 HDN_BEGINTRACKW,专门用于宽字符和 Unicode 字符集;另一个版本是 HDN_BEGINTRACKA,专门用于 ANSI 字符集。这两个版本的使用方法可以从公共控件的头文件 commctrl.h 中获取:

// From commctrl.h

#ifdef UNICODE

#define HDN_BEGINTRACK HDN_BEGINTRACKW

#else

#define HDN_BEGINTRACK HDN_BEGINTRACKA

#endif

所以在实现对消息的 HDN_BEGINTRACK 处理时,实际上是根据 UNICODE 的取值实现对 HDN_BEGINTRACKA 或 HDN_BEGINTRACKW 的处理。那么 Header Control 到底是发送的哪一个消息呢?在这里必须明白:Header Control 是 Windows 通用控件的一部分,它的实现都在 comctl32.dll 动态链接库中。由于这个 DLL 已经被编译成可执行代码,因此在工程中修改 UNICODE 的设置将无济于事。如何知道栏目头控件发送哪一个版本的通知消息呢?是 A 版本还是 W 版本?

为了找到答案,我们必须求助一个经常被遗忘的消息 WM_NOTIFYFORMAT。一般控件第一次被创建时,都要向父窗口一个消息询问父窗口需要哪个版本的通知消息。然后父窗口返回 NFR_ANSI 或 NFR_UNICODE。如果父窗口不处理 WM_NOTIFYFORMAT,那么这个消息将根据父窗口或对话框本身的首选项被传递到 Windows 的 DefWindowProc 消息处理例程进行默认处理。默认为 UNICODE。因此,要知道通知消息的版本,必须处理 ListCtrl 的 WM_NOTIFYFORMAT。为了确认父窗口的返回值,你可以做一个试验便明白了。

如果你不想处理 WM_NOTIFYFORMAT 消息,那么完全可以通过双双实现 HDN_BEGINTRACKA 和 HDN_BEGINTRACKW 通知消息的处理来简化问题的解决方案,同时这种方法也更可靠和通用。此时代码将同时支持 ANSI 和 Unicode。本文附带的例子程序示范了这种方法的实现。如图一所示:

实现代码很简单,Header 控件发送 HDN_XXX 到父窗口(ListCtrl),在 MFC 中可以利用消息反射来处理 Header 控件的通知消息。因为“可锁定栏目头”特性本身更趋向于 Header 控件的属性,而不是 ListCtrl 的属性。如果你不用 MFC ,那么就得处理 ListCtrl 中的通知消息。例子程序使用了消息反射机制,在 Header 控件的消息映射使用 ON_NOTIFY_REFLECT,也就是该写虚拟成员函数 OnChildNotify: BOOL CLockableHeader::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)

{

NMHDR& nmh = *(NMHDR*)lp;

if (nmh.code==HDN_BEGINTRACKW nmg.code==HDN_BEGINTRACKA)

return *pRes=TRUE;

......

}

因为 OnChildNotify 是虚函数,所以没有必要具备消息映射入口。只要实现此函数即可。在任何应用中,Header 发送的消息非此即彼,不会两者都发送。不管怎样,所发送的通知消息在到达父窗口之前都会被吃掉。也就是说,消息处理总是返回 TRUE,是否锁定栏目头的宽度通过一个标志来控制:应用程序通过 Lock 来修改标志的值。

如果锁定了头宽度,那么同时也必须禁用改变宽度的光标,这样用户界面才会有一致性,要实现这一点也很简单: BOOL CLockableHeader::OnSetCursor( CWnd* pWnd, UINT nHit, UINT msg)

{

return m_bLocked ? TRUE : CHeaderCtrl::OnSetCursor(pWnd, nHit, msg);

}
如果栏目头被锁定,则 OnSetCursor 返回 TRUE,此时光标不会被重新设置,否则由 Header 控件的进行默认处理。锁定宽度后,当鼠标移到栏目头上时,Windows 显示标准的箭头光标,而不是带左右箭头光标。

从 CHeaderCtrl 派生类出来的类的使用方法与处理对话框控制一样,通过在父窗口的 OnCreate 的处理例程中进行子类化。实现细节请参考例子源代码:

// CMyView is derived from CListView

int CMyView::OnCreate(LPCREATESTRUCT lpcs)

{

VERIFY(CListView::OnCreate(lpcs)==0);

return m_header.SubclassDlgItem(0,this) ? 0 : -1;

}

由于 Header 控制的资源 ID = 0,所以上面的代码是行得通的。为了有一个友好的用户界面,例子程序创建了一个命令菜单和界面更新处理例程。

⑺ 谁能告诉我怎样在vc单文档程序中利用树状控件编写资源管理器 ,及获得磁盘信息

1·(二者选一)或者创建单文档分隔视图的工程,注意View类基类为CListView/CTreeView或者CFormView
或者,单视图CListView,并使用CDialogBar(或者CDockablePane)做左侧窗口,这个更接近原版的样子。
2·熟悉并使用CFileFind,并显示列表
3·使用CFile或者其它API函数获取文件信息并显示(API效率更高一些,CFile做这个不是专用)
这时候样子就比较像了,剩下的就是功能,这个比较多,简单列举:
ShellExecute 双击打开或者执行文件,CopyFile/DeleteFile
如果需要实现更接近的功能,自己熟悉一下shell编程吧

另外,VC制作文件管理器的例子网上很多,可以搜来做参考。

⑻ VC++ LIstVIew 的使用。

自己上网查,好多例子的。

⑼ 我想用自制的浏览器打开本地磁盘上的html文件不知该如何编程

在VisualStudio6.0中出现了一个新类CHtmlView,利用这个类,我们可以实现在对话框的控制中显示HTML文件。要想使用CHtmlView类,对它的定义和实现就必须有全面深入的理解。我们不妨拿CHtmlView和CListView做一个比较,通过比较这两个类,我们会发现一些有趣的差别。首先,MFC中CListView有一个对应的CListCtrl类,而CHtmlView却没有一个CHtmlCtrl类与之对应;其次,CListView的使用依赖于MFC的文档/视结构,而CHtmlView的实现是基于COM的。通过IWebBrowser2接口来实现,而且IWebBrowser2与MFC文档/视图结构之间没有任何关系。
为了实现在对话框的控制中显示HTML文件,我们也可以为CHtmlView创建一个对应的类CHtmlCtrl。
以下是类CHtmlCtrl程序源代码:
创建一个静态控制(也可以是其他控制),这个控制的ID及大小位置与界面上的控制相同。
BOOLCHtmlCtrl::CreateFromStatic(UINTnID,CWnd*pParent)
{
CStaticwndStatic;
if(!wndStatic.SubclassDlgItem(nID,pParent))
returnFALSE;
//获取静态控制的矩形区域并转换为父窗口的客户区坐标
CRectrc;
wndStatic.GetWindowRect(&rc);
pParent->ScreenToClient(&rc);
wndStatic.DestroyWindow();
//创建HTML控制(CHtmlView)
return
Create(NULL,//类名
NULL,//标题
(WS_CHILD|WS_VISIBLE),//风格
rc,//矩形区域
pParent,//父窗口
nID,//控制ID
NULL);//框架/文档
}

为了避免主控程序将CHtmlView对象看作是文档/视图框架,需要重载,CView::OnMouseActivate和CView::OnDestroy。此外,当用户在控制中单击时,OnMouseActivate要负责响应(WM_MOUSEACTIVATE)。
intCHtmlCtrl::OnMouseActivate(CWnd*pDesktopWnd,UINTnHitTest,UINTmsg)
{
//旁路CView文档/框架
returnCWnd::OnMouseActivate(pDesktopWnd,nHitTest,msg);
}
voidCHtmlCtrl::OnDestroy()
{
if(m_pBrowserApp)
{
m_pBrowserApp->Release();
m_pBrowserApp=NULL;
}
CWnd::OnDestroy();//旁路CView文档/框架
}

通常,CHtmlView是在virtualvoidPostNcDestroy()中释放空间,但对话框中的控制常常是作为堆栈对象实现的,所以,在PostNcDestroy()中不必在做什么。
virtualvoidPostNcDestroy(){}

为了实现“app:”假协议,重载导航处理器OnBeforeNavigate2()。传递“app:”链接到一个虚拟协议处理器。因为app:是假协议,所以在浏览起重要取消掉这个导航。

voidCHtmlCtrl::OnBeforeNavigate2(LPCTSTRlpszURL,
DWORDnFlags,
LPCTSTRlpszTargetFrameName,
CByteArray&baPostedData,
LPCTSTRlpszHeaders,
BOOL*pbCancel)
{
constcharAPP_PROTOCOL[]="app:";
intlen=_tcslen(APP_PROTOCOL);
if(_tcsnicmp(lpszURL,APP_PROTOCOL,len)==0)
{
OnAppCmd(lpszURL+len);
*pbCancel=TRUE;
}
}
重载OnAppCmd(),处理app:命令,当浏览器准备导航到“app:foo”时,这个函数被调用,参数lpszWhere的值为“foo”。
voidCHtmlCtrl::OnAppCmd(LPCTSTRlpszWhere){//default:donothing}

重载OnMouseActivate,OnDestroy,和PostNcDestroy以后,CHtrmlCtrl在对话框中就可以象个控制一样工作。详细的使用方法请参见例子程序:AboutHtml。
运行AboutHtml.exe,并打开About对话框……音乐多么美妙!更有趣的是程序所用到的HTML源文件、图像、声音等文件都作为资源存储在EXE文件中:
//inAboutHtml.rc
ABOUT.HTMHTMLDISCARDABLE"res\about.htm"
PD.JPGHTMLDISCARDABLE"res\pd.jpg"
OKUP.GIFHTMLDISCARDABLE"res\okup.gif"
OKDN.GIFHTMLDISCARDABLE"res\okdn.gif"
MOZART.WAVHTMLDISCARDABLE"res\mozart.wav"
注意:用文件的实际名字作为资源名很重要,以便浏览器能够找到他们。在一个普通的Web页面中,我们使用图像是用下列语法:
<IMGsrc="pd.jpg">
此代码假设图像文件"pd.jpg"存在当前目录(页面文件所在目录)中。
如果图像文件是作为资源存在EXE文件中,我们如何引用呢?方法一样,此时,我们必须告诉浏览器Web页面文件的位置。为此要在Web页面文件的开头加上如下代码:
<BASEurl="res://AboutHtml.exe/about.htm">
这一行代码告诉浏览器当前目录是“res://AboutHtml.exe”,当浏览器遇到代码<IMGsrc="pd.jpg">时,它会按照路径res://AboutHtml.exe/pd.jpg查找。否则,它会在程序文件的路径查找。
通常用res://molename可以访问动态库或可执行文件中的资源。这里res:的意思与http:,ftp:,file:,及mailto的意思相同。即:“在这个路径中的第一个名字是一个文件名,第二个名字是文件中的资源名”。其余的工作由浏览器完成。
为了实现About对话框,先建一个对话框类:CAboutDialog,其中声明一个CHtmlCtrl对象:m_page。CAboutDialog本身的初始化代码如下:

BOOLCAboutDialog::OnInitDialog()
{
VERIFY(CDialog::OnInitDialog());
VERIFY(m_page.CreateFromStatic(IDC_HTMLVIEW,this));
m_page.LoadFromResource(_T("about.htm"));
returnTRUE;
}
CHtmlCtrl::CreateFromStatic是个很简单的函数,它用于简化对话框的设计。因为用插入COM对象的方法太麻烦,所以我在对话框中插入了一个静态控件,改变它的缺省ID号。然后调用CreateFromStatic,以完全相同的ID号、大小、位置创建一个静态CStatic对象。然后在调用DestroyWindow,这个方法很有效。为了加载web页面,调用CHtmlCtrl::LoadFromResource函数,它是由CHtmlView继承而来的。也可以用全路径res://AboutHtml.exe/about.htm作为参数。
现在您已经知道了CHtmlCtrl是如何在对话框中绕过CView来替代框架;知道了如何创建HTML文件,其中包含文字、图像和声音,并把它作为资源在程序中使用。
除此之外,还有一个问题就是:CAboutDialog对话框中“OK”按钮的处理,其实,它根本就不是一个按钮,而是一个在HTML文件中嵌入的图像,用JScript来控制图像被按下时和弹起时的状态。处理“OK”按钮的技巧主要是解决对话框与主控程序之间的通讯。
利用动态HTML文档层(COM)技术可以处理用户单击图像或链接,方法是获得图像元素,然后侦听OnClick事件。但这是一种非常非常麻烦的方法。有没有更简单的方法呢……对于编程者来说,懒惰是一种美德。
假设HTML有如下的图像链接:
<Ahref="ok"><IMG...></A>
当用户单击它时,浏览器显示这个“OK”文件,但是在显示之前,控制先执行CHtmlCtrl::OnBeforeNavigate2。CHtmlCtrl能够在这个函数中做想做的任何事情。
voidCMyHtmlCtrl::OnBeforeNavigate2(
LPCTSTRlpszURL,
...,
BOOL*pbCancel)
{
if(_tcscmp(lpszURL,_T("ok"))==0)
{
//"ok"clicked:
*pbCancel=TRUE;//abort
//willclosedialog
GetParent()->SendMessage(WM_COMMAND,IDOK);
}
}
其实“OK”并不是什么文件;它只是一个很特殊的名字,CHtmlCtrl将它看作是“OK”按钮。为了实现这个想法,程序中创建了一个叫app:的冒充协议来代替“OK”,在about.htm中实际的链接是app:ok。每当浏览器导航到app:somewhere的时候,CHtmlCtrl都以“somewhere”为参数调用一个虚函数:CHtmlCtrl::OnAppCmd。

voidCMyHtmlCtrl::OnAppCmd(LPCTSTRlpszWhere)
{
if(_tcsicmp(lpszWhere,_T("ok"))==0)
{
GetParent()->SendMessage(WM_COMMAND,IDOK);
}
}
您可以在HTML文件中作其他的链接,诸如:app:cancel,app:refresh,或app:whatever等等,并且在OnAppCmd中编写自己的代码来处理“cancel”、“refresh”、和“whatever”、字符串,它有点象在VB中编程。
参照例子程序,将自己的About对话框改进一番吧。如果有兴趣的话,您甚至可以利用这个技术来实现复活节彩蛋。

⑽ 怎样修改clistview绑定的clistctrl控件

dwStyle中可以使用以下一些列表控件的专用风格:
•LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT
这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示
•LVS_EDITLABELS
结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
•LVS_SHOWSELALWAYS
在失去焦点时也显示当前选中的结点
•LVS_SINGLESEL
同时只能选中列表中一项

CListCtrl初始化使用过程:
1. 首先你需要设置列表控件所使用的ImageList(图标列表)
1.1) 如果你使用大图标显示风格,你就需要以如下形式调用:
CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);
1.2) 如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:
CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);
2. 设置列表各项文字列表。
通过调用int InsertItem( int nItem, LPCTSTR lpszItem )可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。

3. 除LVS_REPORT风格外, 其他三种风格都只需要直接调用 InsertItem就可以了。
但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用:
int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem)插入列。
iCol为列的位置,从零开始,lpszColumnHeading为显示的列名,nFormat为显示对齐方式, nWidth为显示宽度,nSubItem为分配给该列的列索引。

在有多列的列表控件中就需要为每一项指明其在每一列中的显示字符,通过调用:
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText )可以设置每列的显示字符。
nItem为设置的项的位置,nSubItem为列位置,lpszText为显示字符。
下面的代码演示了如何设置多列并插入数据:
m_list.SetImageList(&m_listSmall,LVSIL_SMALL); //设置ImageList
m_list.InsertColumn(0,"Col 1",LVCFMT_LEFT,300,0); //设置列
m_list.InsertColumn(1,"Col 2",LVCFMT_LEFT,300,1);
m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);

m_list.InsertItem(0,"Item 1_1"); //插入行
m_list.SetItemText(0,1,"Item 1_2"); //设置该行的不同列的显示字符
m_list.SetItemText(0,2,"Item 1_3");

4. 此外CListCtrl还提供了一些函数用于得到/修改控件的状态。
COLORREF GetTextColor( ) / BOOL SetTextColor( COLORREF cr )
用于得到/设置显示的字符颜色。
COLORREF GetTextBkColor( ) / BOOL SetTextBkColor( COLORREF cr )
用于得到/设置显示的背景颜色。
void SetItemCount( int iCount )
用于得到添加进列表中项的数量。
BOOL DeleteItem(int nItem)
用于删除某一项
BOOL DeleteAllItems( )
将删除所有项。
BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent)
用于设置背景位图。
CString GetItemText( int nItem, int nSubItem )
用于得到某项的显示字符。

5. 列表控件的消息映射同样使用ON_NOTIFY宏,
形式如同:
ON_NOTIFY( wNotifyCode, id, memberFxn )
wNotifyCode为通知代码,id为产生该消息的窗口ID,memberFxn为处理函数

函数的原型如同:
void OnXXXList(NMHDR* pNMHDR, LRESULT* pResult)
其中pNMHDR为一数据结构,在具体使用时需要转换成其他类型的结构。
对于列表控件可能取值和对应的数据结构为:
•LVN_BEGINLABELEDIT 在开始某项编辑字符时发送,所用结构:NMLVDISPINFO
•LVN_ENDLABELEDIT 在结束某项编辑字符时发送,所用结构:NMLVDISPINFO
•LVN_GETDISPINFO 在需要得到某项信息时发送,(如得到某项的显示字符)所用结构:NMLVDISPINFO

关于ON_NOTIFY有很多内容,将在以后的内容中进行详细讲解。
关于动态提供结点所显示的字符:
首先你在项时需要指明lpszItem参数为: LPSTR_TEXTCALLBACK。
在控件显示该结点时会通过发送TVN_GETDISPINFO来取得所需要的字符,在处理该消息时先将参数 pNMHDR转换为LPNMLVDISPINFO,
然后填充其中item.pszText。通过item中的iItem,iSubItem可以知道当前显示的为那一项。下面的代码演示了这种方法:
char szOut[8][3]={"No.1","No.2","No.3"};

阅读全文

与clistview的使用方法相关的资料

热点内容
爱羽手打鸽钟使用方法 浏览:614
追奶王不留行和通草的食用方法 浏览:435
卡文迪许测量引力常量的思想方法 浏览:741
榛子苗种植方法 浏览:731
如何建立新坐标方法 浏览:438
测试仪使用方法 浏览:242
现代教学方法在课堂教学中的运用 浏览:152
高头车电脑双针车的操作方法 浏览:187
黄精泡酒的功效与作用及食用方法 浏览:278
卫生间电热水器和水管连接方法图 浏览:731
香芹籽精华使用方法 浏览:838
黄瓜怎么腌好吃又简单的方法 浏览:779
挖水管施工方法视频 浏览:871
意大利依玛壁挂炉使用方法 浏览:559
组合函数的使用方法和技巧 浏览:106
adb工具使用方法 浏览:946
鸡的哪些说明方法 浏览:189
得了甲减怎么治疗最好的方法 浏览:80
铁门除锈的最简单方法 浏览:267
20斤快速增肥方法 浏览:826