【第十一章 11.3】列表视图控件Listview -- 自绘

贴主:admin 发贴:2024-08-09 09:15 浏量:13

演示:

代码:

// 导入 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();


相关回复


    暂无评论!

发表回复