🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 使用的函数 * 函数原型 ``` HPEN CreatePen( int iStyle, // 是画笔的类型,比如是实线,还是虚线等等。 int cWidth, // 线的宽度 COLORREF color // 线的颜色 ); ``` * 画笔类型: ``` 0/*_PS_SOLID*/ //实线 2/*_PS_DOT*/ //虚线 cWidth=1 1/*_PS_DASH*/ //点线 cWidth=1 3/*_PS_DASHDOT*/ //点划线 cWidth=1 4/*_PS_DASHDOTDOT*/ //点-点-划线 cWidth=1 5/*_PS_NULL*/ //画笔不能画图 6/*_PS_INSIDEFRAME*/ //画笔在由椭圆,矩形、圆角矩形、饼图以及由弦等生成的封闭对象框时,画笔宽度向内扩展。 ``` # aardio封装 * 封装函数 ``` selectPen = function(proc,hdc,color,width,style,brush){ var pen = ::CreatePen(style:0/*_PS_SOLID*/,width:1,color); var oPen = ::SelectObject(hdc,pen ); proc(hdc,pen,brush); ::SelectObject(hdc,oPen); ::DeleteObject(pen); } ``` * brush不传入也是可以的,在自动提示时就是没有的 # 效果 * 黑色的背景画红色线,但出现了白色,可能是线条也有背景吧,是可以更改的。 ![](https://img.kancloud.cn/cb/fc/cbfcdba56660690057011aed815504a3_776x397.png) # 代码 ``` import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=357) winform.add( custom={cls="custom";text="自定义控件";left=53;top=39;right=679;bottom=146;bgcolor=0;z=1}; custom2={cls="custom";text="自定义控件";left=57;top=185;right=680;bottom=307;bgcolor=0;z=2} ) /*}}*/ import gdi import console console.open() winform.custom.wndproc = function(hwnd,message,wParam,lParam){ select(message) { case 0xF/*_WM_PAINT*/ { gdi.paint( hwnd, function( hdc,width, height,rcPaint,fErase,paintStruct ){ gdi.selectPen( function(hdc,pen){ gdi.drawLine(hdc,50,50,width-50,50) },hdc,0x0000FF,1,4/*_PS_DASHDOTDOT*/) ::BitBlt(hdc, 0, 0, width, height, hMemDc, 0, 0, 0xCC0020/*_SRCCOPY*/); } ); } else { } } } winform.custom2.wndproc = function(hwnd,message,wParam,lParam){ select(message) { case 0xF/*_WM_PAINT*/ { gdi.paint( hwnd, function( hdc,width, height,rcPaint,fErase,paintStruct ){ var hPen = ::CreatePen(1,1,0x0000FF) var oPen = ::SelectObject(hdc,hPen) //::Gdi32.MoveToEx(hdc,50,50,null ); //::MoveToEx(hdc,50,50,null) ::MoveToEx(hdc,50,50,::POINTF()) ::LineTo(hdc,width-50,50) ::SelectObject(hdc,oPen) ::DeleteObject(hPen) ::BitBlt(hdc, 0, 0, width, height, hMemDc, 0, 0, 0xCC0020/*_SRCCOPY*/); } ); } else { } } } winform.show(); win.loopMessage(); return winform; ```