List - 列表插入列及移动列

说明

某些情况下, 我们需要调整列顺序, 或插入列 或删除列

示例代码

//包含炫彩界面库文件
#pragma comment(lib, "XCGUI.lib")
#include "xcgui.h"
HELE m_hList = NULL;
int CALLBACK OnBnClickMove(BOOL* pbHandled)
{
//移动模板列
HTEMP hTemp = XList_GetItemTemplate(m_hList);
XTemp_List_MoveColumn(hTemp, 2, 1);
hTemp = XList_GetItemTemplateHeader(m_hList);
XTemp_List_MoveColumn(hTemp, 2, 1);
XEle_Redraw(m_hList);
return 0;
}
int CALLBACK OnBnClickInsert(BOOL* pbHandled)
{
//插入列指定模板列
void* pNodeLayout = XTemp_CreateNode(XC_ELE_LAYOUT);
{
void* pNodeText = XTemp_CreateNode(XC_SHAPE_TEXT);
XTemp_SetNodeAttribute(pNodeText, L"content", L"{binding field=name2}");
XTemp_SetNodeAttribute(pNodeText, L"layout.width", L"fill");
XTemp_SetNodeAttribute(pNodeText, L"layout.height", L"20");
XTemp_AddNode(pNodeLayout, pNodeText);
}
HTEMP hTemp = XList_GetItemTemplate(m_hList);
XTemp_List_InsertNode(hTemp, 1, pNodeLayout);
hTemp = XList_GetItemTemplateHeader(m_hList);
XTemp_List_InsertNode(hTemp, 1, XTemp_CloneNode(pNodeLayout));
XList_InsertColumn(m_hList, 150, 1);
XEle_Redraw(m_hList);
return 0;
}
//3列模板
string strItemTemp_list = R"(
<xc_template_list>
<listHeader_item>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill">
<shapeText content="{binding field=name1}" itemID="1" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill">
<shapeText content="{binding field=name2}" itemID="2" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill">
<shapeText content="{binding field=name3}" itemID="3" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
</listHeader_item>
<list_Item>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill" >
<shapeText content="{binding field=name1}" itemID="1" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill" >
<shapeText content="{binding field=name2}" itemID="2" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
<layoutEleUI layout.alignV="center" layout.height="fill" layout.width="fill" >
<shapeText content="{binding field=name3}" itemID="3" layout.height="fill" layout.width="fill"/>
</layoutEleUI>
</list_Item>
</xc_template_list>)";
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
XInitXCGUI(TRUE);
HWINDOW m_hWindow = XWnd_Create(0, 0, 700, 300, L"炫彩界面库窗口", NULL, window_style_default);
m_hList = XList_Create(20, 40, 560, 200, m_hWindow);
//提示: 项模板移动 和 插入列 对于内置模板来说, 操作比较麻烦,因为内置模板使用的是列延伸,实际只有一列
//可通过指定模板文件, 或加载指定模板, 例如从字符串加载模板
//XList_SetItemTemplateXML(m_hList, L"xml-template-test\\List_Item_5.xml");
HTEMP hTemp1, hTemp2;
XTemp_LoadFromStringEx(listItemTemp_type_list, strItemTemp_list.c_str(), &hTemp1, &hTemp2);
XList_SetItemTemplate(m_hList, hTemp1);
XList_SetItemTemplate(m_hList, hTemp2);
XList_AddColumnText(m_hList, 120, L"name1", L"列表头1");
XList_AddColumnText(m_hList, 120, L"name2", L"列表头2");
XList_AddColumnText(m_hList, 120, L"name3", L"列表头3");
wchar_t tmp[MAX_PATH] = { 0 };
for (int i = 0; i < 3; i++)
{
wsprintf(tmp, L"item-%d", i);
int id = XList_AddItemText(m_hList, tmp);
XList_SetItemText(m_hList, id, 1, L"child-2");
XList_SetItemText(m_hList, id, 2, L"child-3");
}
HELE hButton1 = XBtn_Create(590, 100, 90, 30, L"移动列(2->1)", m_hWindow);
HELE hButton2 = XBtn_Create(590, 150, 90, 30, L"插入列(1)", m_hWindow);
XEle_RegEventC(hButton1, XE_BNCLICK, OnBnClickMove);
XEle_RegEventC(hButton2, XE_BNCLICK, OnBnClickInsert);
XWnd_ShowWindow(m_hWindow, SW_SHOW);
return 0;
}
@ listItemTemp_type_list
list (列表头)与(列表项)组合
Definition: XCGUI.h:1781
#define XE_BNCLICK
按钮点击事件.
Definition: XCGUI.h:939
@ XC_SHAPE_TEXT
形状对象-文本
Definition: XCGUI.h:220
@ XC_ELE_LAYOUT
布局元素
Definition: XCGUI.h:154
void *WINAPI XTemp_CloneNode(void *pNode)
@项模板_克隆节点 克隆一个节点
Definition: ListItemTemp.cpp:947
BOOL WINAPI XTemp_SetNodeAttribute(void *pNode, const wchar_t *pName, const wchar_t *pAttr)
@项模板_置节点属性 设置属性
Definition: ListItemTemp.cpp:834
BOOL WINAPI XTemp_List_MoveColumn(HTEMP hTemp, int iColSrc, int iColDest)
@项模板_列表_移动列 将指定列移动到目标位置
Definition: ListItemTemp.cpp:880
BOOL WINAPI XTemp_List_InsertNode(HTEMP hTemp, int index, void *pNode)
@项模板_列表_插入节点
Definition: ListItemTemp.cpp:760
void *WINAPI XTemp_CreateNode(XC_OBJECT_TYPE nType)
@项模板_创建节点 创建节点
Definition: ListItemTemp.cpp:822
BOOL WINAPI XTemp_LoadFromStringEx(listItemTemp_type_ nType, const char *pStringXML, __out HTEMP *pOutTemp1, __out HTEMP *pOutTemp2)
@项模板_加载从字符串扩展 加载列表项模板从字符串
Definition: ListItemTemp.cpp:527
BOOL WINAPI XTemp_AddNode(void *pParentNode, void *pNode)
@项模板_添加子节点 添加子节点
Definition: ListItemTemp.cpp:808
@ window_style_default
窗口样式-控制按钮: 居中 图标, 标题, 关闭按钮, 最大化按钮, 最小化按钮
Definition: XCGUI.h:398
HELE WINAPI XBtn_Create(int x, int y, int cx, int cy, const wchar_t *pName, HXCGUI hParent)
按钮_创建 创建按钮元素
Definition: ButtonUI.cpp:1765
void WINAPI XEle_Redraw(HELE hEle, BOOL bImmediate)
元素_重绘 重绘元素.
Definition: EleUI.cpp:4179
void WINAPI XC_ShowLayoutFrame(BOOL bShow)
炫彩_显示布局边界 显示布局对象边界.
Definition: Api.cpp:585
void WINAPI XExitXCGUI()
炫彩_退出 退出界面库释放资源. 不可在dllmain()中卸载, 否则会死锁
Definition: App.cpp:572
void WINAPI XRunXCGUI()
炫彩_运行 运行消息循环,当炫彩窗口数量为0时退出.
Definition: App.cpp:564
BOOL WINAPI XInitXCGUI(BOOL bD2D)
炫彩_初始化 初始化界面库.
Definition: App.cpp:557
XEle_RegEventC(hEle, nEvent, memberFunction)
元素_注册事件C 注册元素事件, 回调函数省略元素自身句柄hEle.
void WINAPI XList_RefreshData(HELE hEle)
列表_刷新数据 修改数据后,刷新所有项模板,以便更新数据到模板(如果项可见).
Definition: ListUI.cpp:4849
BOOL WINAPI XList_SetItemText(HELE hEle, int iRow, int iColumn, const wchar_t *pText)
@anchor 列表_置项文本
Definition: ListUI.cpp:5072
HELE WINAPI XList_Create(int x, int y, int cx, int cy, HXCGUI hParent)
列表_创建 创建列表元素.
Definition: ListUI.cpp:4112
HTEMP WINAPI XList_GetItemTemplateHeader(HELE hEle)
@列表_取项模板列表头
Definition: ListUI.cpp:4633
void WINAPI XList_RefreshDataHeader(HELE hEle)
@列表_刷新数据列表头
Definition: ListUI.cpp:4868
BOOL WINAPI XList_SetItemTemplate(HELE hEle, HTEMP hTemp)
列表_置项模板 设置列表项模板.
Definition: ListUI.cpp:4613
HXCGUI WINAPI XList_CreateAdapter(HELE hEle, int colExtend_count)
列表_创建数据适配器 创建数据适配器,根据绑定的项模板初始化数据适配器的列(字段名); 数据适配器存储数据, UI对象根据绑定的字段名显示数据适配器中对应的数据;
Definition: ListUI.cpp:4504
HXCGUI WINAPI XList_CreateAdapterHeader(HELE hEle)
列表_列表头创建数据适配器 创建数据适配器,根据绑定的项模板初始化数据适配器的列(字段名); 数据适配器存储数据, UI对象根据绑定的字段名显示数据适配器中对应的数据;
Definition: ListUI.cpp:4517
int WINAPI XList_AddColumnText(HELE hEle, int nWidth, const wchar_t *pName, const wchar_t *pText)
@anchor 列表_添加列文本
Definition: ListUI.cpp:4941
HTEMP WINAPI XList_GetItemTemplate(HELE hEle)
@列表_取项模板
Definition: ListUI.cpp:4623
int WINAPI XList_InsertColumn(HELE hEle, int width, int iCol)
列表_插入列 插入列.
Definition: ListUI.cpp:4187
HWINDOW WINAPI XWnd_Create(int x, int y, int cx, int cy, const wchar_t *pTitle, HWND hWndParent, int XCStyle)
窗口_创建 创建窗口
Definition: WindowUI.cpp:5964
BOOL WINAPI XWnd_ShowWindow(HWINDOW hWindow, int nCmdShow)
@窗口_显示扩展 显示隐藏及控制窗口最大化还原等
Definition: WindowUI.cpp:6387