【第十一章 11.3】列表视图控件Listview -- 自绘
演示:
代码:
// 导入 win.ui 库,用于创建图形界面 import win.ui; /*DSG{{*/ // 创建一个名为 winform 的窗口对象,并设置其属性 var winform = win.form(text="listview custom draw";right=627;bottom=294;bgcolor=128) // 向窗口中添加一个列表视图控件,并设置其属性 winform.add( listview={cls="listview";left=12;top=13;right=614;bottom=287;bgcolor=128;dl=1;dr=1;fullRow=1;z=1} ) /*}}*/ // 移除列表视图的列标题 winform.listview.modifyStyle(,0x4000/*_LVS_NOCOLUMNHEADER*/) // 向列表视图插入列 winform.listview.insertColumn("列标题3",100) winform.listview.insertColumn("列标题2",100) winform.listview.insertColumn("列标题1",100) // 向列表视图添加行数据 winform.listview.addItem( { text={"第一行内容";"1";"1,2"} } ) winform.listview.addItem( { text={"第二行内容";"2";"2,2"} } ) winform.listview.addItem( { text={"第三行内容";"3";"3,2"} } ) // 列表视图的调整函数 winform.listview.adjust = function(cx,cy){ // 使列表视图填充父窗口的 3 个方向 winform.listview.fillParent(3); } // 列表视图的通知处理函数,用于自绘 winform.listview.onnotify = function(id,code,ptr){ // 如果是自定义绘制通知 if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){ // 获取自定义绘制通知的相关信息 var lvcd = winform.listview.getNotifyCustomDraw(code,ptr); // 如果是项绘制准备阶段 if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/) return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/ // 如果是整体绘制准备阶段 elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){ return 0x20/*_CDRF_NOTIFYITEMDRAW*/; } // 如果是项子项绘制准备阶段 elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){ // 注意这里 iSubItem 的索引自 0 开始(其他函数通常自 1 开始) lvcd.clrText = lvcd.iSubItem % 2? gdi.RGB(255,255,255) : gdi.RGB(12,255,120); lvcd.clrTextBk = lvcd.iSubItem % 2? gdi.RGB(0,12,223) : gdi.RGB(128,23,0); lvcd.update() // 返回默认操作 return 0/*_CDRF_DODEFAULT*/ } } } // 显示窗口 winform.show() // 启动界面线程消息循环 win.loopMessage();
相关回复
-
暂无评论!