導航:首頁 > 使用方法 > 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的使用方法相關的資料

熱點內容
搜派風水機使用方法 瀏覽:692
豬肉價格下跌的解決方法 瀏覽:933
泉州學唱歌技巧和發聲方法 瀏覽:962
神經源性膀胱工傷治療方法 瀏覽:965
如何選擇設計特殊雜質檢查方法 瀏覽:15
電纜線接線方法視頻 瀏覽:776
湖南煙熏肉食用方法 瀏覽:313
釣具的連接方法 瀏覽:135
細胞增生的治療方法 瀏覽:834
下列處理方法不正確的是 瀏覽:167
舒適進入安裝方法 瀏覽:226
用什麼方法粘膠最快 瀏覽:607
無線加濕器的安裝步驟及使用方法 瀏覽:803
歐萊雅洗面乳使用方法 瀏覽:819
win8怎麼設置鎖屏圖片在哪裡設置方法 瀏覽:941
爛地面地坪施工方法簡單 瀏覽:697
穩壓電路計算方法視頻 瀏覽:849
不用安全繩攀岩還有什麼方法 瀏覽:701
作業反應的教學方法 瀏覽:454
247乘101的簡便方法 瀏覽:108