#pragma once #include "wobject/xcontrol.hpp" #include "win32/win.hpp" class xlistbox : public xcontrol { public: xlistbox() :xcontrol(nullptr) {} xlistbox(void* implptr) :xcontrol(implptr) {} 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)//指定位置插入,wParam=-1添加到末尾。如果指定了LBS_SORT风格,则不会重排序,所以LBS_SORT风格下不用。 { int LB_INSERTSTRING = 0x0181; return SendMessage(hWnd, LB_INSERTSTRING, nIndex, (LPARAM)str); } static int DeleteItem(HWND hWnd, int nIndex) //删除指定的列表项,lParam is not used { int LB_DELETESTRING = 0x0182; return SendMessage(hWnd, LB_DELETESTRING, nIndex, 0); } static int FindString(HWND hWnd, int nIndex, string str)//从指定开始表项序号开始查找指定项,忽略大小写,wParam=-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)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { int LB_GETITEMDATA = 0x0199; return SendMessage(hWnd, LB_GETITEMDATA, nIndex, 0); } static int SetItemData(HWND hWnd, int nIndex, string str)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { int LB_SETITEMDATA = 0x019A; return SendMessage(hWnd, LB_SETITEMDATA, nIndex, (LPARAM)str); } static int GetItemHeight(HWND hWnd, int nIndex)//返回列表项中某一项的高度(像素);用于LBS_OWNERDRAWVARIABLE风格的,wParam指定的参数 { int LB_GETITEMHEIGHT = 0x01A1; return SendMessage(hWnd, LB_GETITEMHEIGHT, nIndex, 0); } /*static Rect GetItemRect(HWND hWnd,int nIndex)//获得列表项的客户区RECT { 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)//获取选中项的数目和位置,仅用于多重选择列表框。wParam说明数组缓冲区的大小,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) //选中从nIndex开始第一个str,返回选中的Index,只用在单选列表框中 { 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);//只用在单选列表框中。nIndex = -1为全不选 } /*static int SetSel(HWND hWnd, bool lbSel,int nIndex)//使指定的列表项选中或不选,用于多选中 { int LB_SETSEL = 0x0185; return SendMessage(hWnd,LB_SETSEL,lbSel,nIndex);//用在多选中,wParm表示是否选,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)//指定位置插入,wParam=-1添加到末尾。如果指定了LBS_SORT风格,则不会重排序,所以LBS_SORT风格下不用。 { return InsertItem(GetHWND(), nIndex, str); } int DeleteItem(int nIndex) //删除指定的列表项,lParam is not used { return DeleteItem(GetHWND(), nIndex); } int FindString(int nIndex, string str)//从指定开始表项序号开始查找指定项,忽略大小写,wParam=-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)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { return GetItemData(GetHWND(),nIndex); } int SetItemData(int nIndex, int str)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { return SetItemData(GetHWND(), nIndex, str); } int GetItemHeight(int nIndex)//返回列表项中某一项的高度(像素);用于LBS_OWNERDRAWVARIABLE风格的,wParam指定的参数 { return GetItemHeight(GetHWND(), nIndex); } /*Rect GetItemRect(int nIndex)//获得列表项的客户区RECT { GetItemRect(GetID(),nIndex); }*/ int GetSel(int nIndex)//返回指定列表项的状态,如果查询的列表项被选择了返回一个正值,否则返回0 { return GetSel(GetHWND(), nIndex); } int GetSelCount()//返回选择项的数目,仅用于多重选择列表框 { return GetSelCount(GetHWND()); } int GetSelItems()//获取选中项的数目和位置,仅用于多重选择列表框。wParam说明数组缓冲区的大小,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) //选中从nIndex开始第一个str,返回选中的Index,只用在单选列表框中 { 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)//指定位置插入,wParam=-1添加到末尾。如果指定了LBS_SORT风格,则不会重排序,所以LBS_SORT风格下不用。 { int LB_INSERTSTRING = 0x0181; return SendMessage(hWnd, LB_INSERTSTRING, nIndex, (LPARAM)str); } static int DeleteItem(HWND hWnd, int nIndex) //删除指定的列表项,lParam is not used { int LB_DELETESTRING = 0x0182; return SendMessage(hWnd, LB_DELETESTRING, nIndex, 0); } static int FindString(HWND hWnd, int nIndex, string str)//从指定开始表项序号开始查找指定项,忽略大小写,wParam=-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)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { int LB_GETITEMDATA = 0x0199; return SendMessage(hWnd, LB_GETITEMDATA, nIndex, 0); } static int SetItemData(HWND hWnd, int nIndex, int str)//返回指定列表项的附加数据;不是LBS_HASSTRINGS风格的,内容来自于LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数,否则内容来自于LB_SETITEMDATA消息的lParam { int LB_SETITEMDATA = 0x019A; return SendMessage(hWnd, LB_SETITEMDATA, nIndex, str); } static int GetItemHeight(HWND hWnd, int nIndex)//返回列表项中某一项的高度(像素);用于LBS_OWNERDRAWVARIABLE风格的,wParam指定的参数 { int LB_GETITEMHEIGHT = 0x01A1; return SendMessage(hWnd, LB_GETITEMHEIGHT, nIndex, 0); } /*static Rect GetItemRect(HWND hWnd,int nIndex)//获得列表项的客户区RECT { 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)//获取选中项的数目和位置,仅用于多重选择列表框。wParam说明数组缓冲区的大小,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) //选中从nIndex开始第一个str,返回选中的Index,只用在单选列表框中 { 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);//只用在单选列表框中。nIndex = -1为全不选 } /*static int SetSel(HWND hWnd, bool lbSel,int nIndex)//使指定的列表项选中或不选,用于多选中 { int LB_SETSEL = 0x0185; return SendMessage(hWnd,LB_SETSEL,lbSel,nIndex);//用在多选中,wParm表示是否选,lParam为-1,选择所有 } static bool SetTopIndex(HWND hWnd,int nIndex)//将指定的列表项设置为第一个可见项 { int LB_SETTOPINDEX = 0x0197; return SendMessage(hWnd,LB_SETTOPINDEX,nIndex,0); }*/ };