From d5d98f8ef5077717c723ef1467c98d275a7dedd3 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期四, 04 七月 2024 14:26:28 +0800
Subject: [PATCH] add listbox

---
 jrj/xframe/xcontrol/xlistbox.hpp  |  525 +++++++++++++++++++++++++++
 jrj/xframe/xcontrol/xlistview.hpp |  533 ++++++++++++++++++++++++++++
 jrj/project/business/SO3.list.cpp |    4 
 jrj/ext-jrj/ext-jrj.vcxproj       |   30 +
 4 files changed, 1,086 insertions(+), 6 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index f69ebbd..f9aeb6a 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -121,6 +121,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
       <AdditionalIncludeDirectories>..\xframe;..\xframe\system;..\project</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -139,7 +140,7 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>NDEBUG;EXTJRJ_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NDEBUG;EXTJRJ_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_XWIN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ConformanceMode>true</ConformanceMode>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
@@ -230,6 +231,10 @@
     <ClInclude Include="..\xframe\xcontrol\xflowchart.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xhtml.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xlayersheet.hpp" />
+    <ClInclude Include="..\xframe\xcontrol\xlistbox.hpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\xframe\xcontrol\xlistview.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xreport.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xshtml.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xtreeview.hpp" />
@@ -259,23 +264,26 @@
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\GDNSourcePaperCard.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\GDNSourcePriceMaint.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\select.item.po.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\SelectItem.New.GDN.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\AdministrativeDepartment.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\AdministrativeDepartmentFolder.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\BlankExcelTemplate.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -289,13 +297,14 @@
     </ClCompile>
     <ClCompile Include="..\project\business\HR\ManpowerFileWindow.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\PO\business4.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\PO\Maint.PaperCard.PO.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\PO\Maint.PurcherItem.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
@@ -312,9 +321,11 @@
     </ClCompile>
     <ClCompile Include="..\project\business\Public\message.business.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Public\message.supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\quote.enquiry.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
@@ -346,6 +357,7 @@
     </ClCompile>
     <ClCompile Include="..\project\business\SO\Product.FetchNo.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SO\Product.Select.SO.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -363,33 +375,43 @@
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\asklist.Owner.Supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\Inspection.Supplie.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\list.Owner.Supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\maint.Document.Supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\maint.Document.SupplierEx.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\maint.Document.SupplierSD.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\maint.Owner.Supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\maintex.Owner.Supplier.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\paymen.Supplie.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier\SupplierSource.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\printview\Maint.Template.PrintEx.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
diff --git a/jrj/project/business/SO3.list.cpp b/jrj/project/business/SO3.list.cpp
index c75d8cc..8f92f1c 100644
--- a/jrj/project/business/SO3.list.cpp
+++ b/jrj/project/business/SO3.list.cpp
@@ -143,8 +143,8 @@
 				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
 			if (arg.GetArgString(L"billstatus") != L"")
 			{
-				string billstatus = arg.GetArgString(L"billstatus");
-				string statusName = GetBillStatusName(billstatus);
+				xstring billstatus = arg.GetArgString(L"billstatus");
+				xstring statusName = GetBillStatusName(billstatus);
 				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
 				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
 			}
diff --git a/jrj/xframe/xcontrol/xlistbox.hpp b/jrj/xframe/xcontrol/xlistbox.hpp
new file mode 100644
index 0000000..bbadab4
--- /dev/null
+++ b/jrj/xframe/xcontrol/xlistbox.hpp
@@ -0,0 +1,525 @@
+#pragma once
+
+#include "wobject/xcontrol.hpp"
+#include "win32/win.hpp"
+
+class xlistbox : public xcontrol
+{
+	static int GetCount(HWND hWnd)//杩斿洖鍒楄〃椤规�婚」鏁�
+	{
+		int LB_GETCOUNT = 0x018B;
+		return SendMessage(hWnd, LB_GETCOUNT, 0, 0);
+	}
+
+	static int AddItem(HWND hWnd, string str)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		int LB_ADDSTRING = 0x0180;
+		return SendMessage(hWnd, LB_ADDSTRING, 0, (LPARAM)str);
+	}
+
+	static int AddItem(HWND hWnd, string str, int p)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		int LB_ADDSTRING = 0x0180;
+		int nIndex = SendMessage(hWnd, LB_ADDSTRING, 0, (LPARAM)str);
+		int LB_SETITEMDATA = 0x019A;
+		SendMessage(hWnd, LB_SETITEMDATA, nIndex, p);
+		return nIndex;
+	}
+	static int InsertItem(HWND hWnd, int nIndex, string str)//鎸囧畾浣嶇疆鎻掑叆锛寃Param=-1娣诲姞鍒版湯灏俱�傚鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽垯涓嶄細閲嶆帓搴忥紝鎵�浠BS_SORT椋庢牸涓嬩笉鐢ㄣ��
+	{
+		int LB_INSERTSTRING = 0x0181;
+		return SendMessage(hWnd, LB_INSERTSTRING, nIndex, (LPARAM)str);
+	}
+
+	static int DeleteItem(HWND hWnd, int nIndex) //鍒犻櫎鎸囧畾鐨勫垪琛ㄩ」锛宭Param is not used
+	{
+		int LB_DELETESTRING = 0x0182;
+		return SendMessage(hWnd, LB_DELETESTRING, nIndex, 0);
+	}
+
+	static int FindString(HWND hWnd, int nIndex, string str)//浠庢寚瀹氬紑濮嬭〃椤瑰簭鍙峰紑濮嬫煡鎵炬寚瀹氶」锛屽拷鐣ュぇ灏忓啓锛寃Param=-1浠庣涓�椤规壘
+	{
+		int LB_ERR = -1;
+		int LB_FINDSTRING = 0x018F;
+		int lResult = SendMessage(hWnd, LB_FINDSTRING, nIndex, (LPARAM)str);
+		return lResult;
+	}
+
+	static int FindStringExact(HWND hWnd, int nIndex, string str)//鏁翠釜瀛楃涓插尮閰�
+	{
+		int LB_ERR = -1;
+		int LB_FINDSTRINGEXACT = 0x01A2;
+		int lResult = SendMessage(hWnd, LB_FINDSTRINGEXACT, nIndex, (LPARAM)str);
+		return lResult;
+	}
+
+	static int GetAnchorIndex(HWND hWnd)//杩斿洖榧犳爣鏈�鍚庨�変腑鐨勯」鐨勭储寮�
+	{
+		int LB_GETANCHORINDEX = 0x019D;
+		return SendMessage(hWnd, LB_GETANCHORINDEX, 0, 0);
+	}
+
+	static int GetCaretIndex(HWND hWnd)//杩斿洖鍏锋湁鐭╁舰鐒︾偣鐨勯」鐨勭储寮�
+	{
+		int LB_GETCARETINDEX = 0x019F;
+		return SendMessage(hWnd, LB_GETCARETINDEX, 0, 0);
+	}
+
+	static int GetCurSel(HWND hWnd)//鍗曢�夛紝杩斿洖褰撳墠琚�変腑椤圭储寮�
+	{
+		int LB_GETCURSEL = 0x0188;
+		return SendMessage(hWnd, LB_GETCURSEL, 0, 0);
+	}
+
+	static int GetHorizon(HWND hWnd)//杩斿洖鍒楄〃妗嗗彲婊氬姩鐨勫搴︼紙鍍忕礌锛�
+	{
+		int LB_GETHORIZONTALEXTENT = 0x0193;
+		return SendMessage(hWnd, LB_GETHORIZONTALEXTENT, 0, 0);
+	}
+
+	static int GetItemData(HWND hWnd, int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		int LB_GETITEMDATA = 0x0199;
+		return SendMessage(hWnd, LB_GETITEMDATA, nIndex, 0);
+	}
+	static int SetItemData(HWND hWnd, int nIndex, string str)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		int LB_SETITEMDATA = 0x019A;
+		return SendMessage(hWnd, LB_SETITEMDATA, nIndex, (LPARAM)str);
+	}
+
+	static int GetItemHeight(HWND hWnd, int nIndex)//杩斿洖鍒楄〃椤逛腑鏌愪竴椤圭殑楂樺害锛堝儚绱狅級锛涚敤浜嶭BS_OWNERDRAWVARIABLE椋庢牸鐨勶紝wParam鎸囧畾鐨勫弬鏁�
+	{
+		int LB_GETITEMHEIGHT = 0x01A1;
+		return SendMessage(hWnd, LB_GETITEMHEIGHT, nIndex, 0);
+	}
+	/*static Rect GetItemRect(HWND hWnd,int nIndex)//鑾峰緱鍒楄〃椤圭殑瀹㈡埛鍖篟ECT
+	{
+		  int LB_GETITEMRECT  = 0x0198;
+		  xrect rect;
+		  return SendMessage(hWnd,LB_GETITEMRECT,nIndex,rect);
+	}*/
+	static int GetSel(HWND hWnd, int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑鐘舵�侊紝濡傛灉鏌ヨ鐨勫垪琛ㄩ」琚�夋嫨浜嗚繑鍥炰竴涓鍊硷紝鍚﹀垯杩斿洖0
+	{
+		int LB_GETSEL = 0x0187;
+		return SendMessage(hWnd, LB_GETSEL, nIndex, 0);
+	}
+	static int GetSelCount(HWND hWnd)//杩斿洖閫夋嫨椤圭殑鏁扮洰锛屼粎鐢ㄤ簬澶氶噸閫夋嫨鍒楄〃妗�
+	{
+		int LB_GETSELCOUNT = 0x0190;
+		return SendMessage(hWnd, LB_GETSELCOUNT, 0, 0);
+	}
+	static int GetSelItems(HWND hWnd)//鑾峰彇閫変腑椤圭殑鏁扮洰鍜屼綅缃紝浠呯敤浜庡閲嶉�夋嫨鍒楄〃妗嗐�倃Param璇存槑鏁扮粍缂撳啿鍖虹殑澶у皬,lParam鎸囧悜涓�涓暣鍨嬫暟缁勭紦鍐插尯
+	{
+		int LB_GETSELITEMS = 0x0191;
+		int nMax = GetSelCount(hWnd);
+		int nItems;
+		return SendMessage(hWnd, LB_GETSELITEMS, nMax, nItems);
+	}
+
+	static string GetText(HWND hWnd, int nIndex) //杩斿洖鏂囨湰
+	{
+		int LB_GETTEXT = 0x0189;
+		int LB_GETTEXTLEN = 0x018A;
+		int nLen = SendMessage(hWnd, LB_GETTEXTLEN, nIndex, 0);
+		string str = new wchar_t[nLen + 1];
+		SendMessage(hWnd, LB_GETTEXT, nIndex, (LPARAM)str);
+		return str;
+	}
+	static int GetTextLen(HWND hWnd, int nIndex) //杩斿洖褰撳墠閫変腑椤规枃鏈暱搴�
+	{
+		int LB_GETTEXTLEN = 0x018A;
+		return SendMessage(hWnd, LB_GETTEXTLEN, nIndex, 0);
+	}
+	static int GetTopIndex(HWND hWnd) //绗竴涓彲瑙侀」鐨勭储寮�
+	{
+		int LB_GETTOPINDEX = 0x018E;
+		return SendMessage(hWnd, LB_GETTOPINDEX, 0, 0);
+	}
+	static int ResetCount(HWND hWnd)//娓呴櫎鎵�浠ュ垪琛ㄩ」
+	{
+		int LB_RESETCONTENT = 0x0184;
+		return SendMessage(hWnd, LB_RESETCONTENT, 0, 0);
+	}
+	static int SelectString(HWND hWnd, int nIndex, string str) //閫変腑浠巒Index寮�濮嬬涓�涓猻tr锛岃繑鍥為�変腑鐨処ndex锛屽彧鐢ㄥ湪鍗曢�夊垪琛ㄦ涓�
+	{
+		int LB_SELECTSTRING = 0x018C;
+		return SendMessage(hWnd, LB_SELECTSTRING, nIndex, (LPARAM)str);
+	}
+
+	static int SelItemRangeEx(HWND hWnd, int sIndex, int eIndex)//浠呯敤浜庡閲嶉�夋嫨锛屼粠璧风偣-缁堢偣
+	{
+		int LB_SELITEMRANGEEX = 0x0183;
+		return SendMessage(hWnd, LB_SELITEMRANGEEX, sIndex, eIndex);
+	}
+	static int SetAnchorIndex(HWND hWnd, int nIndex)//璁剧疆榧犳爣鏈�鍚庨�変腑鐨勮〃椤规垚鎸囧畾琛ㄩ」
+	{
+		int LB_SETANCHORINDEX = 0x019C;
+		return SendMessage(hWnd, LB_SETANCHORINDEX, nIndex, 0);
+	}
+	/*static int SetCarerIndex(HWND hWnd,int nIndex,bool lParam)//璁剧疆閿洏杈撳叆鐒︾偣鍒版寚瀹氳〃椤�
+	{
+		int LB_SETCARETINDEX = 0x019E;
+		return SendMessage(hWnd,LB_SETCARETINDEX,nIndex,lParam);
+	}*/
+	static int SetColumnWidth(HWND hWnd, int nWidth)//璁剧疆澶氬垪鍒楄〃妗嗗搴︼紝style涓哄鍒楀垪琛ㄦ鏃舵湁鏁�
+	{
+		int LB_SETCOLUMNWIDTH = 0x0195;
+		SendMessage(hWnd, LB_SETCOLUMNWIDTH, nWidth, 0);
+		return 1;
+	}
+	static int SetCount(HWND hWnd, int nCnt)//璁剧疆琛ㄩ」鏁扮洰
+	{
+		int LB_SETCOUNT = 0x01A7;
+		SendMessage(hWnd, LB_SETCOUNT, nCnt, 0);
+		return 1;
+	}
+	static int SetCurSel(HWND hWnd, int nIndex)//璁剧疆鎸囧畾鍒楄〃椤逛负褰撳墠閫夋嫨椤�
+	{
+		int LB_SETCURSEL = 0x0186;
+		return SendMessage(hWnd, LB_SETCURSEL, nIndex, 0);//鍙敤鍦ㄥ崟閫夊垪琛ㄦ涓�俷Index = -1涓哄叏涓嶉��
+	}
+	/*static int SetSel(HWND hWnd, bool lbSel,int nIndex)//浣挎寚瀹氱殑鍒楄〃椤归�変腑鎴栦笉閫夛紝鐢ㄤ簬澶氶�変腑
+	{
+		  int LB_SETSEL  = 0x0185;
+		  return SendMessage(hWnd,LB_SETSEL,lbSel,nIndex);//鐢ㄥ湪澶氶�変腑锛寃Parm琛ㄧず鏄惁閫夛紝lParam涓�-1锛岄�夋嫨鎵�鏈�
+	}
+
+	static bool SetTopIndex(HWND hWnd,int nIndex)//灏嗘寚瀹氱殑鍒楄〃椤硅缃负绗竴涓彲瑙侀」
+	{
+		 int LB_SETTOPINDEX  = 0x0197;
+		 return SendMessage(hWnd,LB_SETTOPINDEX,nIndex,0);
+	}*/
+
+	int GetCount()//杩斿洖鍒楄〃椤规�婚」鏁�
+	{
+		return GetCount(GetHWND());
+	}
+
+	int AddItem(string str)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		return AddItem(GetHWND(), str);
+	}
+
+	int AddItem(string str, int p)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		return AddItem(GetHWND(), str, p);
+	}
+
+	int InsertItem(int nIndex, string str)//鎸囧畾浣嶇疆鎻掑叆锛寃Param=-1娣诲姞鍒版湯灏俱�傚鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽垯涓嶄細閲嶆帓搴忥紝鎵�浠BS_SORT椋庢牸涓嬩笉鐢ㄣ��
+	{
+		return InsertItem(GetHWND(), nIndex, str);
+	}
+
+	int DeleteItem(int nIndex) //鍒犻櫎鎸囧畾鐨勫垪琛ㄩ」锛宭Param is not used
+	{
+		return DeleteItem(GetHWND(), nIndex);
+	}
+
+	int FindString(int nIndex, string str)//浠庢寚瀹氬紑濮嬭〃椤瑰簭鍙峰紑濮嬫煡鎵炬寚瀹氶」锛屽拷鐣ュぇ灏忓啓锛寃Param=-1浠庣涓�椤规壘
+	{
+		return FindString(GetHWND(), nIndex, str);
+	}
+
+	int FindStringExact(int nIndex, string str)//鏁翠釜瀛楃涓插尮閰�
+	{
+		return  FindStringExact(GetHWND(), nIndex, str);
+	}
+
+	int GetAnchorIndex()//杩斿洖榧犳爣鏈�鍚庨�変腑鐨勯」鐨勭储寮�
+	{
+		return GetAnchorIndex(GetHWND());
+	}
+
+	int GetCaretIndex()//杩斿洖鍏锋湁鐭╁舰鐒︾偣鐨勯」鐨勭储寮�
+	{
+		return GetCaretIndex(GetHWND());
+	}
+
+	int GetCurSel()//鍗曢�夛紝杩斿洖褰撳墠琚�変腑椤圭储寮�
+	{
+		return GetCurSel(GetHWND());
+	}
+
+	int GetHorizon()//杩斿洖鍒楄〃妗嗗彲婊氬姩鐨勫搴︼紙鍍忕礌锛�
+	{
+		return GetHorizon(GetHWND());
+	}
+
+	int GetItemData(int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		return GetItemData(GetHWND(),nIndex);
+	}
+
+	int SetItemData(int nIndex, int str)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		return SetItemData(GetHWND(), nIndex, str);
+	}
+
+	int GetItemHeight(int nIndex)//杩斿洖鍒楄〃椤逛腑鏌愪竴椤圭殑楂樺害锛堝儚绱狅級锛涚敤浜嶭BS_OWNERDRAWVARIABLE椋庢牸鐨勶紝wParam鎸囧畾鐨勫弬鏁�
+	{
+		return GetItemHeight(GetHWND(), nIndex);
+	}
+
+	/*Rect GetItemRect(int nIndex)//鑾峰緱鍒楄〃椤圭殑瀹㈡埛鍖篟ECT
+	{
+		  GetItemRect(GetID(),nIndex);
+	}*/
+
+	int GetSel(int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑鐘舵�侊紝濡傛灉鏌ヨ鐨勫垪琛ㄩ」琚�夋嫨浜嗚繑鍥炰竴涓鍊硷紝鍚﹀垯杩斿洖0
+	{
+		return GetSel(GetHWND(), nIndex);
+	}
+
+	int GetSelCount()//杩斿洖閫夋嫨椤圭殑鏁扮洰锛屼粎鐢ㄤ簬澶氶噸閫夋嫨鍒楄〃妗�
+	{
+		return GetSelCount(GetHWND());
+	}
+
+	int GetSelItems()//鑾峰彇閫変腑椤圭殑鏁扮洰鍜屼綅缃紝浠呯敤浜庡閲嶉�夋嫨鍒楄〃妗嗐�倃Param璇存槑鏁扮粍缂撳啿鍖虹殑澶у皬,lParam鎸囧悜涓�涓暣鍨嬫暟缁勭紦鍐插尯
+	{
+		return GetSelItems(GetHWND());
+	}
+
+	string GetText(int nIndex) //杩斿洖鏂囨湰
+	{
+		return GetText(GetHWND(), nIndex);
+	}
+
+	int GetTextLen(int nIndex) //杩斿洖褰撳墠閫変腑椤规枃鏈暱搴�
+	{
+		GetTextLen(GetHWND(), nIndex);
+	}
+	int GetTopIndex() //绗竴涓彲瑙侀」鐨勭储寮�
+	{
+		return GetTopIndex(GetHWND());
+	}
+	int ResetCount()//娓呴櫎鎵�浠ュ垪琛ㄩ」
+	{
+		return ResetCount(GetHWND());
+	}
+	int SelectString(int nIndex, string str) //閫変腑浠巒Index寮�濮嬬涓�涓猻tr锛岃繑鍥為�変腑鐨処ndex锛屽彧鐢ㄥ湪鍗曢�夊垪琛ㄦ涓�
+	{
+		return SelectString(GetHWND(), nIndex, str);
+	}
+
+	int SelItemRangeEx(int sIndex, int eIndex)//浠呯敤浜庡閲嶉�夋嫨锛屼粠璧风偣-缁堢偣
+	{
+		return SelItemRangeEx(GetHWND(), sIndex, eIndex);
+	}
+	int SetAnchorIndex(int nIndex)//璁剧疆榧犳爣鏈�鍚庨�変腑鐨勮〃椤规垚鎸囧畾琛ㄩ」
+	{
+		return SetAnchorIndex(GetHWND(), nIndex);
+	}
+	/*int SetCarerIndex(int nIndex,bool lParam)//璁剧疆閿洏杈撳叆鐒︾偣鍒版寚瀹氳〃椤�
+	{
+		return SetCarerIndex(GetHWND(),nIndex,lParam);
+	}*/
+	int SetColumnWidth(int nWidth)//璁剧疆澶氬垪鍒楄〃妗嗗搴︼紝style涓哄鍒楀垪琛ㄦ鏃舵湁鏁�
+	{
+		return  SetColumnWidth(GetHWND(), nWidth);
+	}
+	int SetCount(int nCnt)//璁剧疆琛ㄩ」鏁扮洰
+	{
+		return SetCount(GetHWND(), nCnt);
+	}
+	int SetCurSel(int nIndex)//璁剧疆鎸囧畾鍒楄〃椤逛负褰撳墠閫夋嫨椤�
+	{
+		return SetCurSel(GetHWND(), nIndex);
+	}
+	/*int SetSel( bool lbSel,int nIndex)//浣挎寚瀹氱殑鍒楄〃椤归�変腑鎴栦笉閫夛紝鐢ㄤ簬澶氶�変腑
+	{
+		 return SetSel(lbSel, nIndex);
+	}
+
+	static bool SetTopIndex(int nIndex)//灏嗘寚瀹氱殑鍒楄〃椤硅缃负绗竴涓彲瑙侀」
+	{
+		return SetTopIndex(nIndex);
+	}*/
+
+	static int GetCount(HWND hWnd)//杩斿洖鍒楄〃椤规�婚」鏁�
+	{
+		int LB_GETCOUNT = 0x018B;
+		return SendMessage(hWnd, LB_GETCOUNT, 0, 0);
+	}
+
+	static int AddItem(HWND hWnd, string str)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		int LB_ADDSTRING = 0x0180;
+		return SendMessage(hWnd, LB_ADDSTRING, 0, (LPARAM)str);
+	}
+
+	static int AddItem(HWND hWnd, string str, int p)//杩藉姞涓�涓垪琛ㄩ」锛屽鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽皢閲嶆帓搴忥紝鍚﹀垯杩藉姞鍒版渶鍚�
+	{
+		int LB_ADDSTRING = 0x0180;
+		int nIndex = SendMessage(hWnd, LB_ADDSTRING, 0, (LPARAM)str);
+		int LB_SETITEMDATA = 0x019A;
+		SendMessage(hWnd, LB_SETITEMDATA, nIndex, p);
+		return nIndex;
+	}
+	static int InsertItem(HWND hWnd, int nIndex, string str)//鎸囧畾浣嶇疆鎻掑叆锛寃Param=-1娣诲姞鍒版湯灏俱�傚鏋滄寚瀹氫簡LBS_SORT椋庢牸锛屽垯涓嶄細閲嶆帓搴忥紝鎵�浠BS_SORT椋庢牸涓嬩笉鐢ㄣ��
+	{
+		int LB_INSERTSTRING = 0x0181;
+		return SendMessage(hWnd, LB_INSERTSTRING, nIndex, (LPARAM)str);
+	}
+
+	static int DeleteItem(HWND hWnd, int nIndex) //鍒犻櫎鎸囧畾鐨勫垪琛ㄩ」锛宭Param is not used
+	{
+		int LB_DELETESTRING = 0x0182;
+		return SendMessage(hWnd, LB_DELETESTRING, nIndex, 0);
+	}
+
+	static int FindString(HWND hWnd, int nIndex, string str)//浠庢寚瀹氬紑濮嬭〃椤瑰簭鍙峰紑濮嬫煡鎵炬寚瀹氶」锛屽拷鐣ュぇ灏忓啓锛寃Param=-1浠庣涓�椤规壘
+	{
+		int LB_ERR = -1;
+		int LB_FINDSTRING = 0x018F;
+		int lResult = SendMessage(hWnd, LB_FINDSTRING, nIndex, (LPARAM)str);
+		return lResult;
+	}
+
+	static int FindStringExact(HWND hWnd, int nIndex, string str)//鏁翠釜瀛楃涓插尮閰�
+	{
+		int LB_ERR = -1;
+		int LB_FINDSTRINGEXACT = 0x01A2;
+		int lResult = SendMessage(hWnd, LB_FINDSTRINGEXACT, nIndex, (LPARAM)str);
+		return lResult;
+	}
+
+	static int GetAnchorIndex(HWND hWnd)//杩斿洖榧犳爣鏈�鍚庨�変腑鐨勯」鐨勭储寮�
+	{
+		int LB_GETANCHORINDEX = 0x019D;
+		return SendMessage(hWnd, LB_GETANCHORINDEX, 0, 0);
+	}
+
+	static int GetCaretIndex(HWND hWnd)//杩斿洖鍏锋湁鐭╁舰鐒︾偣鐨勯」鐨勭储寮�
+	{
+		int LB_GETCARETINDEX = 0x019F;
+		return SendMessage(hWnd, LB_GETCARETINDEX, 0, 0);
+	}
+
+	static int GetCurSel(HWND hWnd)//鍗曢�夛紝杩斿洖褰撳墠琚�変腑椤圭储寮�
+	{
+		int LB_GETCURSEL = 0x0188;
+		return SendMessage(hWnd, LB_GETCURSEL, 0, 0);
+	}
+
+	static int GetHorizon(HWND hWnd)//杩斿洖鍒楄〃妗嗗彲婊氬姩鐨勫搴︼紙鍍忕礌锛�
+	{
+		int LB_GETHORIZONTALEXTENT = 0x0193;
+		return SendMessage(hWnd, LB_GETHORIZONTALEXTENT, 0, 0);
+	}
+
+	static int GetItemData(HWND hWnd, int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		int LB_GETITEMDATA = 0x0199;
+		return SendMessage(hWnd, LB_GETITEMDATA, nIndex, 0);
+	}
+	static int SetItemData(HWND hWnd, int nIndex, int str)//杩斿洖鎸囧畾鍒楄〃椤圭殑闄勫姞鏁版嵁锛涗笉鏄疞BS_HASSTRINGS椋庢牸鐨勶紝鍐呭鏉ヨ嚜浜嶭B_ADDSTRING鎴朙B_INSERTSTRING娑堟伅鐨刲Param鍙傛暟锛屽惁鍒欏唴瀹规潵鑷簬LB_SETITEMDATA娑堟伅鐨刲Param
+	{
+		int LB_SETITEMDATA = 0x019A;
+		return SendMessage(hWnd, LB_SETITEMDATA, nIndex, str);
+	}
+
+	static int GetItemHeight(HWND hWnd, int nIndex)//杩斿洖鍒楄〃椤逛腑鏌愪竴椤圭殑楂樺害锛堝儚绱狅級锛涚敤浜嶭BS_OWNERDRAWVARIABLE椋庢牸鐨勶紝wParam鎸囧畾鐨勫弬鏁�
+	{
+		int LB_GETITEMHEIGHT = 0x01A1;
+		return SendMessage(hWnd, LB_GETITEMHEIGHT, nIndex, 0);
+	}
+	/*static Rect GetItemRect(HWND hWnd,int nIndex)//鑾峰緱鍒楄〃椤圭殑瀹㈡埛鍖篟ECT
+	{
+		  int LB_GETITEMRECT  = 0x0198;
+		  xrect rect;
+		  return SendMessage(hWnd,LB_GETITEMRECT,nIndex,rect);
+	}*/
+	static int GetSel(HWND hWnd, int nIndex)//杩斿洖鎸囧畾鍒楄〃椤圭殑鐘舵�侊紝濡傛灉鏌ヨ鐨勫垪琛ㄩ」琚�夋嫨浜嗚繑鍥炰竴涓鍊硷紝鍚﹀垯杩斿洖0
+	{
+		int LB_GETSEL = 0x0187;
+		return SendMessage(hWnd, LB_GETSEL, nIndex, 0);
+	}
+	static int GetSelCount(HWND hWnd)//杩斿洖閫夋嫨椤圭殑鏁扮洰锛屼粎鐢ㄤ簬澶氶噸閫夋嫨鍒楄〃妗�
+	{
+		int LB_GETSELCOUNT = 0x0190;
+		return SendMessage(hWnd, LB_GETSELCOUNT, 0, 0);
+	}
+	static int GetSelItems(HWND hWnd)//鑾峰彇閫変腑椤圭殑鏁扮洰鍜屼綅缃紝浠呯敤浜庡閲嶉�夋嫨鍒楄〃妗嗐�倃Param璇存槑鏁扮粍缂撳啿鍖虹殑澶у皬,lParam鎸囧悜涓�涓暣鍨嬫暟缁勭紦鍐插尯
+	{
+		int LB_GETSELITEMS = 0x0191;
+		int nMax = GetSelCount(hWnd);
+		int nItems;
+		return SendMessage(hWnd, LB_GETSELITEMS, nMax, nItems);
+	}
+
+	static string GetText(HWND hWnd, int nIndex) //杩斿洖鏂囨湰
+	{
+		int LB_GETTEXT = 0x0189;
+		int LB_GETTEXTLEN = 0x018A;
+		int nLen = SendMessage(hWnd, LB_GETTEXTLEN, nIndex, 0);
+		string str = new wchar_t[nLen + 1];
+		SendMessage(hWnd, LB_GETTEXT, nIndex, (LPARAM)str);
+		return str;
+	}
+	static int GetTextLen(HWND hWnd, int nIndex) //杩斿洖褰撳墠閫変腑椤规枃鏈暱搴�
+	{
+		int LB_GETTEXTLEN = 0x018A;
+		return SendMessage(hWnd, LB_GETTEXTLEN, nIndex, 0);
+	}
+	static int GetTopIndex(HWND hWnd) //绗竴涓彲瑙侀」鐨勭储寮�
+	{
+		int LB_GETTOPINDEX = 0x018E;
+		return SendMessage(hWnd, LB_GETTOPINDEX, 0, 0);
+	}
+	static int ResetCount(HWND hWnd)//娓呴櫎鎵�浠ュ垪琛ㄩ」
+	{
+		int LB_RESETCONTENT = 0x0184;
+		return SendMessage(hWnd, LB_RESETCONTENT, 0, 0);
+	}
+	static int SelectString(HWND hWnd, int nIndex, string str) //閫変腑浠巒Index寮�濮嬬涓�涓猻tr锛岃繑鍥為�変腑鐨処ndex锛屽彧鐢ㄥ湪鍗曢�夊垪琛ㄦ涓�
+	{
+		int LB_SELECTSTRING = 0x018C;
+		return SendMessage(hWnd, LB_SELECTSTRING, nIndex, (LPARAM)str);
+	}
+
+	static int SelItemRangeEx(HWND hWnd, int sIndex, int eIndex)//浠呯敤浜庡閲嶉�夋嫨锛屼粠璧风偣-缁堢偣
+	{
+		int LB_SELITEMRANGEEX = 0x0183;
+		return SendMessage(hWnd, LB_SELITEMRANGEEX, sIndex, eIndex);
+	}
+	static int SetAnchorIndex(HWND hWnd, int nIndex)//璁剧疆榧犳爣鏈�鍚庨�変腑鐨勮〃椤规垚鎸囧畾琛ㄩ」
+	{
+		int LB_SETANCHORINDEX = 0x019C;
+		return SendMessage(hWnd, LB_SETANCHORINDEX, nIndex, 0);
+	}
+	/*static int SetCarerIndex(HWND hWnd,int nIndex,bool lParam)//璁剧疆閿洏杈撳叆鐒︾偣鍒版寚瀹氳〃椤�
+	{
+		int LB_SETCARETINDEX = 0x019E;
+		return SendMessage(hWnd,LB_SETCARETINDEX,nIndex,lParam);
+	}*/
+	static int SetColumnWidth(HWND hWnd, int nWidth)//璁剧疆澶氬垪鍒楄〃妗嗗搴︼紝style涓哄鍒楀垪琛ㄦ鏃舵湁鏁�
+	{
+		int LB_SETCOLUMNWIDTH = 0x0195;
+		SendMessage(hWnd, LB_SETCOLUMNWIDTH, nWidth, 0);
+		return 1;
+	}
+	static int SetCount(HWND hWnd, int nCnt)//璁剧疆琛ㄩ」鏁扮洰
+	{
+		int LB_SETCOUNT = 0x01A7;
+		SendMessage(hWnd, LB_SETCOUNT, nCnt, 0);
+		return 1;
+	}
+	static int SetCurSel(HWND hWnd, int nIndex)//璁剧疆鎸囧畾鍒楄〃椤逛负褰撳墠閫夋嫨椤�
+	{
+		int LB_SETCURSEL = 0x0186;
+		return SendMessage(hWnd, LB_SETCURSEL, nIndex, 0);//鍙敤鍦ㄥ崟閫夊垪琛ㄦ涓�俷Index = -1涓哄叏涓嶉��
+	}
+	/*static int SetSel(HWND hWnd, bool lbSel,int nIndex)//浣挎寚瀹氱殑鍒楄〃椤归�変腑鎴栦笉閫夛紝鐢ㄤ簬澶氶�変腑
+	{
+		  int LB_SETSEL  = 0x0185;
+		  return SendMessage(hWnd,LB_SETSEL,lbSel,nIndex);//鐢ㄥ湪澶氶�変腑锛寃Parm琛ㄧず鏄惁閫夛紝lParam涓�-1锛岄�夋嫨鎵�鏈�
+	}
+
+	static bool SetTopIndex(HWND hWnd,int nIndex)//灏嗘寚瀹氱殑鍒楄〃椤硅缃负绗竴涓彲瑙侀」
+	{
+		 int LB_SETTOPINDEX  = 0x0197;
+		 return SendMessage(hWnd,LB_SETTOPINDEX,nIndex,0);
+	}*/
+};
\ No newline at end of file
diff --git a/jrj/xframe/xcontrol/xlistview.hpp b/jrj/xframe/xcontrol/xlistview.hpp
new file mode 100644
index 0000000..4f29612
--- /dev/null
+++ b/jrj/xframe/xcontrol/xlistview.hpp
@@ -0,0 +1,533 @@
+#pragma once
+
+#include "wobject/xcontrol.hpp"
+#include "win32/win.hpp"
+
+
+typedef struct tagLVITEMW
+{
+	UINT mask;
+	int iItem;
+	int iSubItem;
+	UINT state;
+	UINT stateMask;
+	LPWSTR pszText;
+	int cchTextMax;
+	int iImage;
+	LPARAM lParam;
+	int iIndent;
+	int iGroupId;
+	UINT cColumns; // tile view columns
+	UINT* puColumns;
+	int* piColFmt;
+	int iGroup; // readonly. only valid for owner data.
+} LVITEMW, * LPLVITEMW;
+
+typedef struct tagLVCOLUMNW
+{
+	UINT mask;
+	int fmt;
+	int cx;
+	LPWSTR pszText;
+	int cchTextMax;
+	int iSubItem;
+	int iImage;
+	int iOrder;
+	int cxMin;       // min snap point
+	int cxDefault;   // default snap point
+	int cxIdeal;     // read only. ideal may not eqaul current width if auto sized (LVS_EX_AUTOSIZECOLUMNS_) to a lesser width.
+} LVCOLUMNW, * LPLVCOLUMNW;
+
+typedef struct tagLVFINDINFOW
+{
+	UINT flags;
+	LPCWSTR psz;
+	LPARAM lParam;
+	POINT pt;
+	UINT vkDirection;
+} LVFINDINFOW, * LPFINDINFOW;
+
+typedef LVITEMW lvitem;
+typedef LVCOLUMNW lvcolumn;
+typedef LVFINDINFOW lvfindinfo;
+
+struct himagelist
+{
+};
+
+struct imagelist
+{
+	himagelist hlist;
+};
+
+struct NMLISTVIEW : public NMHDR
+{
+	NMHDR   hdr;
+	int     iItem;
+	int     iSubItem;
+	UINT    uNewState;
+	UINT    uOldState;
+	UINT    uChanged;
+	POINT   ptAction;
+	LPARAM  lParam;
+};
+
+class xlistview : public xcontrol
+{
+	static int SetdwStyle(HWND hWnd, int dwStyle)//璁剧疆椋庢牸
+	{
+		int GWL_STYLE_ = -16;
+		int LVS_ICON_ = 0x0000;//澶у浘鏍�
+		int LVS_REPORT_ = 0x0001;
+		int LVS_SMALLICON_ = 0x0002;
+		int LVS_LIST_ = 0x0003;//鍒楄〃
+
+		int IStyle =GetWindowLong(hWnd, GWL_STYLE_);
+		int LVS_TYPEMASK_ = 0x0003;
+		int LVS_EDITLABELS_ = 0x0200;
+		IStyle &= ~LVS_TYPEMASK_;//娓呴櫎鏄剧ず鏂瑰紡浣�
+		return SetWindowLong(hWnd, GWL_STYLE_, IStyle | dwStyle);
+	}
+	static int SetReportStyle(HWND hWnd)//璁剧疆Report椋庢牸
+	{
+		//鑾峰緱鍘熸湁椋庢牸
+		int GWL_STYLE_ = -16;
+		int IStyle = GetWindowLong(hWnd, GWL_STYLE_);
+		int LVS_TYPEMASK_ = 0x0003;
+		int LVS_EDITLABELS_ = 0x0200;
+		IStyle &= ~LVS_TYPEMASK_;//娓呴櫎鏄剧ず鏂瑰紡浣�
+
+		//璁惧畾涓�涓柊鐨勭獥鍙i鏍�
+		int LVS_REPORT_ = 0x0001;
+		int LVS_NOLABELWRAP_ = 0x0080;
+		int LVS_SHOWSELALWAYS_ = 0x0008;
+		IStyle |= LVS_REPORT_;//璁剧疆style涓簉eport
+		SetWindowLong(hWnd, GWL_STYLE_, IStyle | LVS_NOLABELWRAP_ | LVS_SHOWSELALWAYS_ | LVS_EDITLABELS_);
+		//璁剧疆鎵╁睍椋庢牸
+		int dwStyle;
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETEXTENDEDLISTVIEWSTYLE_ = LVM_FIRST_ + 55;
+		dwStyle = SendMessage(hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE_, 0, 0);//鑾峰彇鎵╁睍椋庢牸
+		int LVS_EX_FULLROWSELECT_ = 0x00000020;//鏁磋閫変腑,銆�applies to report mode only
+		int LVS_EX_GRIDLINES_ = 0x00000001; //缃戞牸绾�
+		int LVS_EX_SUBITEMIMAGES_ = 0x00000002;//鍙互鍦ㄥ垪琛ㄤ腑鍔營CON
+		int LVS_EX_CHECKBOXES_ = 0x00000004;//鍓嶉潰鍔犱釜checkbox
+		dwStyle |= LVS_EX_FULLROWSELECT_ | LVS_EX_GRIDLINES_ | LVS_EX_CHECKBOXES_ | LVS_EX_SUBITEMIMAGES_;
+
+		int LVM_SETEXTENDEDLISTVIEWSTYLE_ = LVM_FIRST_ + 54;
+		return SendMessage(hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE_, dwStyle, dwStyle);
+	}
+
+	static int GetImageList(HWND hWnd, int iImageList)//ImageList
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETIMAGELIST_ = LVM_FIRST_ + 2;
+		return SendMessage(hWnd, LVM_GETIMAGELIST_, iImageList, 0);
+	}
+	static int SetImageList(HWND hWnd, int iImageList, int himl)//璁剧疆ImageList
+	{
+		/*int LVSIL_NORMAL_ = 0;
+		int LVSIL_SMALL_ = 1;
+		int LVSIL_STATE_ = 2;*/
+		int LVM_FIRST_ = 0x1000;
+		int LVM_SETIMAGELIST_ = LVM_FIRST_ + 3;
+		return SendMessage(hWnd, LVM_SETIMAGELIST_, iImageList, himl);
+	}
+
+	static int InsertColumn(HWND hWnd, int nCol, string label, int nFormat, int nWidth, int nSubItem)//澧炲姞鍒楋紝鍔犲叆鍒楀ご
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_INSERTCOLUMN_ = LVM_FIRST_ + 97;
+
+		int LVCF_FMT_ = 0x0001;//瀵归綈鏂瑰紡锛歭eft,right
+		int LVCF_WIDTH_ = 0x0002;//鍒楀搴�
+		int LVCF_TEXT_ = 0x0004;//鏂囨湰
+		int LVCF_SUBITEM_ = 0x0008;//涓哄垎閰嶇粰璇ュ垪鐨勫垪绱㈠紩
+		int LVCF_ORDER_ = 0x0020;//鍒楀亸绉婚『搴忎粠宸﹀埌鍙�
+		int LVCFMT_LEFT_ = 0x0000;
+		int LVCFMT_RIGHT_ = 0x0001;
+		int LVCFMT_CENTER_ = 0x0002;
+
+		lvcolumn lvc;
+		lvc.mask = LVCF_FMT_ | LVCF_WIDTH_ | LVCF_TEXT_ | LVCF_SUBITEM_;//椋庢牸
+		lvc.fmt = nFormat;
+
+		xrect rect;
+		//GetWindowRect(hWnd,rect);//鍙栧緱绐楀彛鍦ㄥ睆骞曞潗鏍囩郴涓嬬殑RECT鍧愭爣锛堝寘鎷鎴峰尯鍜岄潪瀹㈡埛鍖猴級锛岃繖鏍峰彲浠ュ緱鍒扮獥鍙g殑澶у皬鍜岀浉瀵瑰睆骞曞乏涓婅(0,0)鐨勪綅缃��
+		//GetClientRect;
+		lvc.cx = nWidth;//(rect.right - rect.left ) * 3/5; //LVCF_WIDTH 锛學idth of the column, in pixels.
+		lvc.pszText = (LPWSTR)label;//鏂囧瓧
+		lvc.cchTextMax = 255;
+		lvc.iSubItem = nSubItem;
+		lvc.iImage = 0;
+		lvc.iOrder = 0;
+		return SendMessage(hWnd, LVM_INSERTCOLUMN_, nCol, (LPARAM) & lvc);
+	}
+
+	static int InsertItem(HWND hWnd, int xIndex, string label, int pictureindex = 0)//only the label and picture index need to be specified	
+	{
+		int LVM_FIRST_ = 0x1000;// ListView messages
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+
+		//LVITEM_mask
+		//int LVIF_COLFMT
+		//int LVIF_COLUMNS_ = 0x0200;
+		int LVIF_DI_SETITEM_ = 0x1000;
+		//int LVIF_GROUPID_ = 0x0100;
+		int LVIF_IMAGE_ = 0x0002;
+		//int LVIF_INDENT_ = 0x0010;
+		//int LVIF_NORECOMPUTE_ = 0x0800;
+		int LVIF_PARAM_ = 0x0004;
+		int LVIF_STATE_ = 0x0008;
+		int LVIF_TEXT_ = 0x0001;
+		//LVITEM_state
+		int LVIS_FOCUSED_ = 0x0001;
+		int LVIS_SELECTED_ = 0x0002;
+		int LVIS_OVERLAYMASK_ = 0x0F00;
+
+		lvitem lvi;
+		lvi.mask = LVIF_TEXT_ | LVIF_IMAGE_;
+		lvi.iItem = xIndex; //鎸囧畾鎻掑叆椤圭洰鐨勮鍙�
+		lvi.iSubItem = 0; //鍒楀彿
+		//lvi.state = LVIS_FOCUSED_ | LVIS_SELECTED_ | LVIS_OVERLAYMASK_;
+		//lvi.stateMask = ;
+		lvi.pszText = (LPWSTR)label;
+		lvi.cchTextMax = 255;
+		lvi.iImage = pictureindex;
+		//lvi.lParam = data;
+		//lvi.iIndent
+
+		//int LVIF_GROUPID_ = 0x0100;
+		//int I_GROUPIDCALLBACK_ = -1;
+		//int I_GROUPIDNONE_ = -2;
+		//int iGroupId = 1;
+		//lvi.iGroupId = iGroupId;			
+		return SendMessage(hWnd, LVM_INSERTITEM_, 0, (LPARAM) & lvi);
+	}
+
+	static int InsertItemEx(HWND hWnd, int xIndex, string label, int pictureindex = 0, int data = 0)//only the label and picture index need to be specified	
+	{
+		int LVM_FIRST_ = 0x1000;// ListView messages
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+
+		//LVITEM_mask
+		//int LVIF_COLFMT
+		//int LVIF_COLUMNS_ = 0x0200;
+		int LVIF_DI_SETITEM_ = 0x1000;
+		//int LVIF_GROUPID_ = 0x0100;
+		int LVIF_IMAGE_ = 0x0002;
+		//int LVIF_INDENT_ = 0x0010;
+		//int LVIF_NORECOMPUTE_ = 0x0800;
+		int LVIF_PARAM_ = 0x0004;
+		int LVIF_STATE_ = 0x0008;
+		int LVIF_TEXT_ = 0x0001;
+		//LVITEM_state
+		int LVIS_FOCUSED_ = 0x0001;
+		int LVIS_SELECTED_ = 0x0002;
+		int LVIS_OVERLAYMASK_ = 0x0F00;
+
+		lvitem lvi;
+		lvi.mask = LVIF_TEXT_ | LVIF_IMAGE_ | LVIF_PARAM_;
+		lvi.iItem = xIndex; //鎸囧畾鎻掑叆椤圭洰鐨勮鍙�
+		lvi.iSubItem = 0; //鍒楀彿
+		//lvi.state = LVIS_FOCUSED_ | LVIS_SELECTED_ | LVIS_OVERLAYMASK_;
+		//lvi.stateMask = ;
+		lvi.pszText = (LPWSTR)label;
+		lvi.cchTextMax = 255;
+		lvi.iImage = pictureindex;
+		lvi.lParam = data;
+		//lvi.iIndent
+
+		//int LVIF_GROUPID_ = 0x0100;
+		//int I_GROUPIDCALLBACK_ = -1;
+		//int I_GROUPIDNONE_ = -2;
+		//int iGroupId = 1;
+		//lvi.iGroupId = iGroupId;			
+		return SendMessage(hWnd, LVM_INSERTITEM_, 0, (LPARAM)&lvi);
+	}
+
+	static int SetItemText(HWND hWnd, int nItem, int nSubItem, string label)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_SETITEMTEXT_ = LVM_FIRST_ + 116;
+		int LVIF_TEXT_ = 0x0001;
+
+		lvitem lvi;
+		lvi.mask = LVIF_TEXT_;
+		lvi.iSubItem = nSubItem;
+		lvi.pszText = (LPWSTR)label;
+		lvi.cchTextMax = 255;
+		return SendMessage(hWnd, LVM_SETITEMTEXT_, nItem, (LPARAM)&lvi);
+	}
+
+	static int DeleteItemAll(HWND hWnd)//鍒犻櫎鎵�鏈�
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_DELETEALLITEMS_ = LVM_FIRST_ + 9;
+		return SendMessage(hWnd, LVM_DELETEALLITEMS_, 0, 0);
+	}
+
+	static int DeleteColumn(HWND hWnd, int nCol)//鍒犻櫎鍒�
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_DELETECOLUMN_ = LVM_FIRST_ + 28;
+		return SendMessage(hWnd, LVM_DELETECOLUMN_, nCol, 0);
+	}
+
+	static int DeleteItem(HWND hWnd, int nIndex)//鍒犻櫎琛�
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_DELETEITEM_ = LVM_FIRST_ + 8;
+		return SendMessage(hWnd, LVM_DELETEITEM_, nIndex, 0);
+	}
+
+	static int EditLabel(HWND hWnd, int nIndex)//nIndex= -1琛ㄧず鍙栨秷缂栬緫
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_EDITLABEL_ = LVM_FIRST_ + 118;
+		return SendMessage(hWnd, LVM_EDITLABEL_, nIndex, 0);
+	}
+
+	static int FindItem(HWND hWnd, int iStart, string label, bool partial, bool wrap)
+	{
+		//FindItem( int iStart, string label, boolean partial,boolean wrap )
+			//partial=true鎼滅礌鍖呭惈label寮�澶寸殑锛�=false蹇呴』鍖归厤鏁翠釜鏍囩
+			//wrap =true杩斿洖绗竴涓壘鍒扮殑锛�=false杩斿洖鏈�鍚庢壘鍒扮殑
+		int LVM_FIRST_ = 0x1000;
+		int LVM_FINDITEM_ = LVM_FIRST_ + 83;
+
+		//flags
+		int LVFI_PARAM_ = 0x0001;
+		int LVFI_STRING_ = 0x0002;
+		int LVFI_PARTIAL_ = 0x0008;
+		int LVFI_WRAP_ = 0x0020;
+		int LVFI_NEARESTXY_ = 0x0040;
+		//vkDirection
+		int VK_PRIOR_ = 0x21;
+		int VK_NEXT_ = 0x22;
+		int VK_END_ = 0x23;
+		int VK_HOME_ = 0x24;
+		int VK_LEFT_ = 0x25;
+		int VK_UP = 0x26;
+		int VK_RIGHT_ = 0x27;
+		int VK_DOWN_ = 0x28;
+
+		lvfindinfo lvfi;
+		if (partial == true)
+		{
+			lvfi.flags = LVFI_PARTIAL_ | LVFI_STRING_;
+		}
+		else
+			lvfi.flags = LVFI_STRING_;
+		if (wrap == true)
+		{
+			lvfi.flags |= LVFI_WRAP_;
+		}
+		lvfi.psz = label;
+		//lvfi.lParam = //涓篖VFI_PARAM鏃舵湁鏁�
+		//lvfi.pt //鍒濆鎼滅储浣嶇疆,涓篖VFI_NEARESTXY 鏃舵湁鏁�
+		//lvfi.vkDirection = VK_NEXT_; //鎼滅礌鏂瑰悜銆俆his member is valid only if LVFI_NEARESTXY is set in the flags member
+
+		return SendMessage(hWnd, LVM_FINDITEM_, iStart, (LPARAM)&lvfi);
+	}
+
+	static int GetColumn(HWND hWnd, int iCol, lvcolumn lvc)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETCOLUMN_ = LVM_FIRST_ + 95;
+		return SendMessage(hWnd, LVM_GETCOLUMN_, iCol, (LPARAM)&lvc);
+	}
+
+	static int GetItem(HWND hWnd, lvitem& lvi)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETITEM_ = LVM_FIRST_ + 75;
+		return SendMessage(hWnd, LVM_GETITEM_, 0, (LPARAM)&lvi);
+	}
+
+	static int GetItemCount(HWND hWnd)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETITEMCOUNT_ = LVM_FIRST_ + 4;
+		return SendMessage(hWnd, LVM_GETITEMCOUNT_, 0, 0);
+	}
+
+	static int GetItemText(HWND hWnd, int nIndex, lvitem lvi)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETITEMTEXT_ = LVM_FIRST_ + 115;
+		return SendMessage(hWnd, LVM_GETITEMTEXT_, nIndex, (LPARAM)&lvi);
+	}
+
+	static int GetNextItem(HWND hWnd, int nIndex, int flags)//nIndex=-1鏃朵粠绗竴涓紑濮�
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETNEXTITEM_ = LVM_FIRST_ + 12;
+		return SendMessage(hWnd, LVM_GETNEXTITEM_, nIndex, flags);
+	}
+
+	static int GetSelectColumn(HWND hWnd)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETSELECTEDCOLUMN_ = LVM_FIRST_ + 174;
+		return SendMessage(hWnd, LVM_GETSELECTEDCOLUMN_, 0, 0);
+	}
+
+	static int GetSelectCount(HWND hWnd)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETSELECTEDCOUNT_ = LVM_FIRST_ + 50;
+		return SendMessage(hWnd, LVM_GETSELECTEDCOUNT_, 0, 0);
+	}
+
+	static int SetColumn(HWND hWnd, int iCol, lvcolumn lvc)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_SETCOLUMN_ = LVM_FIRST_ + 96;
+		return SendMessage(hWnd, LVM_SETCOLUMN_, iCol, (LPARAM)&lvc);
+	}
+
+	static int SetItem(HWND hWnd, lvitem lvi)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_SETITEM_ = LVM_FIRST_ + 76;
+		return SendMessage(hWnd, LVM_SETITEM_, 0, (LPARAM)&lvi);
+	}
+
+	static int SetItemText(HWND hWnd, int nIndex, lvitem lvi)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_SETITEMTEXT_ = LVM_FIRST_ + 116;
+		return SendMessage(hWnd, LVM_SETITEMTEXT_, nIndex, (LPARAM)&lvi);
+	}
+
+	static int InsertColumn(HWND hWnd, int nCol, int nFormat, int nWidth, string label, int nSubItem)//澧炲姞鍒�
+	{
+		lvcolumn lvc;     // 鍒�
+		// ZeroMemory(&lvc, sizeof(lvcolumn));
+
+		int LVCF_FMT_ = 0x0001;
+		int LVCF_WIDTH_ = 0x0002;
+		int LVCF_TEXT_ = 0x0004;
+		int LVCF_SUBITEM_ = 0x0008;
+		int LVCFMT_LEFT_ = 0x0000;
+		lvc.mask = LVCF_FMT_ | LVCF_TEXT_ | LVCF_WIDTH_ | LVCF_SUBITEM_; // 椋庢牸  
+		lvc.fmt = nFormat;//鏂囨湰宸﹀榻�
+		lvc.cx = nWidth;         // cx 鏄垪鐨勫搴︼紙浠ュ儚绱犵偣涓哄崟浣嶏級銆備互鍚庢偍鍙互鍙戦�佹秷鎭疞VM_SETCOLUMNWIDTH 鏉ユ敼鍙樺垪鐨勫搴︺��
+		lvc.pszText = (LPWSTR)label; // 鏂囧瓧
+		lvc.cchTextMax = 255;       // 鏂囧瓧闀垮害
+		lvc.iSubItem = nSubItem;         // 鍒楀彿
+
+		int LVM_FIRST_ = 0x1000;// ListView messages
+		int LVM_INSERTCOLUMN_ = LVM_FIRST_ + 97;
+		return SendMessage(hWnd, LVM_INSERTCOLUMN_, nCol, (LPARAM)&lvc);
+		//lvc.pszText = "鍐呭瓨浣跨敤";
+		//SendMessage(hWnd, LVM_INSERTCOLUMN_, 0, (LPARAM_)&lvc);
+		//lvc.pszText = "ID";
+		//SendMessage(hWnd, LVM_INSERTCOLUMN_, 0, (LPARAM_)&lvc);
+
+	}
+	static int InsertItem(HWND hWnd, int nItem, int nSubItem, string label, int pictureindex)//澧炲姞琛�
+	{
+		lvitem lvi;     // 鍒�
+		// ZeroMemory(&lvi, sizeof(lvitem));
+
+		int LVIF_TEXT_ = 0x0001;
+		int LVIF_IMAGE_ = 0x0002;
+		int LVIF_PARAM_ = 0x0004;
+		int LVIF_STATE_ = 0x0008;
+
+		int MAX_PATH_ = 255;
+		int LVIS_STATEIMAGEMASK_ = 0xF000;
+		int LVIS_FOCUSED_ = 0x0001;
+		int LVIS_SELECTED_ = 0x0002;
+		lvi.mask = LVIF_TEXT_ | LVIF_IMAGE_ | LVIF_STATE_ | LVIF_PARAM_; // 鏂囧瓧銆佸浘鐗�// 鎺╃爜浣嶇殑缁勫悎锛堜笅闈㈡湁瀵瑰簲鎺╃爜鐨勫厓绱犻兘宸插湪鎷彿涓爣鍑烘帺鐮侊級锛岃〃鏄庡摢浜涘厓绱犳槸鏈夋晥鐨�
+		lvi.iItem = nItem; //琛屽彿
+		lvi.iSubItem = nSubItem;  //鍒楀彿
+		lvi.pszText = (LPWSTR)label;
+		lvi.cchTextMax = 255;       // 鏂囧瓧闀垮害
+		lvi.iImage = pictureindex;
+		lvi.state = LVIS_FOCUSED_;  // 鐘舵�侊紝涓嬮潰浼氬垪鍑恒�傦紙LVIF_STATE锛�
+		lvi.stateMask = LVIS_STATEIMAGEMASK_;// 鐘舵�佹帺鐮侊紝鐢ㄦ潵璇存槑瑕佽幏鍙栨垨璁剧疆鍝簺鐘舵�併��
+		int LVM_FIRST_ = 0x1000;// ListView messages
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+		return SendMessage(hWnd, LVM_INSERTITEM_, 0, (LPARAM)&lvi);
+		//lvi.pszText = "鏃ユ湰";
+		//SendMessage(hWnd, LVM_INSERTITEM_, 0, (LPARAM_)&lvi);
+		//lvi.pszText = "寰峰浗";
+		//SendMessage(hWnd, LVM_INSERTITEM_, 0, (LPARAM_)&lvi);
+	}
+
+	static string GetItemText(HWND hWnd, int nIndex)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_GETITEMTEXT_ = LVM_FIRST_ + 115;
+		int LVIF_TEXT_ = 0x0001;
+
+		lvitem lvi;
+		lvi.mask = LVIF_TEXT_;
+		lvi.iItem = nIndex;
+		lvi.pszText = new wchar_t[255];
+		lvi.cchTextMax = 255;
+		int ret = SendMessage(hWnd, LVM_GETITEMTEXT_, nIndex, (LPARAM)&lvi);
+		//trace("result: %s", ret.toString());
+		return lvi.pszText;
+	}
+
+	/*static int AddItem(HWND hWnd,string label, int pictureindex = 0) //鍚嶅瓧鍜屽浘鐗�
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+		lvitem pitem;
+		pitem.iItem = 0;
+		pitem.iSubItem = 0;
+		pitem.pszText = label;
+		pitem.iImage = pictureindex;
+
+		return win__::SendMessage(hWnd, LVM_INSERTITEM_, 0, &pitem);
+	}
+
+	static int AddItem(HWND hWnd,lvitem hItem)
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+		return win__::SendMessage(hWnd, LVM_INSERTITEM_, 0, &hItem);
+	}
+
+
+	static int InsertItem(HWND hWnd,int nIndex,lvitem hItem )//more than the label and picture index need to be specified
+	{
+		int LVM_FIRST_ = 0x1000;
+		int LVM_INSERTITEM_ = LVM_FIRST_ + 77;
+		return win__::SendMessage(hWnd, LVM_INSERTITEM_, 0, &hItem);
+	}
+
+	static int Sort (HWND hWnd,int hItem ,string sorttype )
+	{
+	}
+
+	//-------
+	static int AddLargePicture()
+	{
+	}
+	static int AddStatePicture()
+	{
+	}
+	static int DeleteLargePicture(int nIndex)
+	{
+	}
+	static int DeleteLargePictures()
+	{
+	}
+	static int DeleteStatePictures()
+	{
+	}
+	static int Drag ()
+	{
+	//dragmode = Begin!锛孋ancel!,End!
+	}
+	static int SetColumn (HWND hWnd,int nIndex,string label,string alignment,int width )
+	{
+	}*/
+
+};
\ No newline at end of file

--
Gitblit v1.9.3