aardio 文档

aardio 范例:GDI+自绘

//GDI+自绘
import win.ui;
/*DSG{{*/
winform = win.form(text="listbox 自绘演示(GDI+)";right=973;bottom=619)
winform.add(
listbox={cls="listbox";left=41;top=18;right=950;bottom=597;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;items={};ownerDraw=1;z=1}
)
/*}}*/

winform.listbox.onMeasureItem = function(measureItem,dpiScaleX,dpiScaleY){
    //注意listbox的实际高度受行高的影响,只有自绘时才能设置行高
    measureItem.itemHeight = 61 * dpiScaleY;  
}

import gdip;
winform.listbox.onDrawItem = function(drawItem,dpiScaleX,dpiScaleY){
    var rc = drawItem.rcItem;

    //创建画板
    var graphics = gdip.graphics(drawItem.hDC);

    //创建背景刷子
    var brush = gdip.solidBrush(0xFFFFFFFF);
    graphics.fillRectangle(brush,rc.left,rc.top,rc.width(),rc.height())
    brush.delete(); 

    //画选区渐变背景
    if( drawItem.itemState & 0x1/*_ODS_SELECTED*/){
        var p1 = ::POINTF(rc.left,rc.top)
        var p2 = ::POINTF(rc.left,rc.bottom)  
        var lineBrush = gdip.lineBrush(p1/*渐变起始坐标*/, p2 /*渐变终止坐标*/ , 0x2FFFFFFF/*起始颜色*/, 0xFFFFFFE0/*结束颜色*/, 2/*_GdipWrapModeTileFlipY*/ )
        graphics.fillRectangle(lineBrush,rc.left,rc.top,rc.width(),rc.height());
        lineBrush.delete()
    }

    //第二个项目开始顶部画线 
    if( drawItem.itemID > 0 ){
        var pen = gdip.pen(0xFFDCDCCC,1);
        graphics.drawLine(pen, rc.left,rc.top,rc.right,rc.top);
        pen.delete()
    }

    //获取字体
    var font = gdip.font(drawItem.hDC);
    var strformat = gdip.stringformat (); 

    var str = winform.listbox.getItemText(drawItem.itemID + 1);
    var brush = gdip.solidBrush(0xFF222222);
    graphics.drawString( str , font , rc.inflate(-16,-16).float(), strformat,brush);

    //释放对象
    font.delete();
    strformat.delete();
    brush.delete();
    graphics.delete();
}

for(i=1;10;2){  
    winform.listbox.add("控件属性面板中点击「行为 / 自绘」设为 true");
    winform.listbox.add("也就是在控件创建参数里添加 ownerDraw=true");
}

winform.enableDpiScaling();
winform.show();

return win.loopMessage();

Markdown 格式