让人迷惑的Custom Draw与Owner draw

最近忙于美化界面,然而wince上面提供的功能比桌面上要少的多,网上可供选择的控件也少的可怜(后来发现还是有些的,没有调研就没有发言权啊!:()。好在功夫不负有心人,借鉴别人的代码,也给我倒腾出带图片的按钮、不规则形状按钮、可在每行中显示图片的listctrl。希望最近有时间可以把这些整理出来写成博客,这次先不提这。这里要说的让人迷惑的Custom Draw与Owner draw。

      可能有不少人对于这两个概念不怎么了解,或者没有听说过,更不用说它们有什么区别了!不幸的是,我之前也是其中一个...
      从字面上来看,custom draw应该可以解释成定制式的绘制,而owner draw可以表达为自定义绘制。那么先看看何谓定制?通俗的说,就是
  1. 改变控件的某些属性(控件的背景色),然后让windows来处理绘制的工作。
  2. 只想自己绘制控件的某些部分,让windows来处理其他的部分。
  3. 完全自己来绘制整个控件,那么告诉windows什么都不用做。
说到这,owner draw,可以等同于上面说的第三种情况,就是你必须处理绘制控件的所有工作。所要做的工作更多,更复杂,所花费的时间也更多。因而custom draw是首选,没办法了,再选owner draw--喜欢没事找事?...
      那么custom draw如何绘制和通知windows你的决定呢?这就必须要处理NM_CUSTOMDRAW消息。接收该消息的函数原型如下:
                   void OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult )
其中参数pNMHDR包含有控件的窗口句柄,id等,当然重要的是包含了当前所处的绘制阶段信息,总共有4个阶段:
  • 画之前
  • 画之后
  • 擦除之前
  • 擦除之后
你可以在相应的阶段进行绘制工作,并通知windows要处理哪些工作,那么如何通知呢?通过参数pResult。

可能你觉得奇怪,这就结束了?本来我是打算根据看的博客原文详细翻译成中文的,可惜被抢先了。那么不如只概要的总体上描述,毕竟不管原文还是翻译的文章都比较长。有兴趣深究的可以看下面的链接:
原文: http://www.codeproject.com/KB/list/lvcustomdraw.aspx?msg=875581

翻译:http://blog.csdn.net/dylgsy/article/details/818550

引用原文地址:http://blog.csdn.net/ryanzll/article/details/7294379

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mapbox Draw 是一个用于在 Mapbox 地图上绘制图形的 JavaScript 库。要修改绘制的点、线和面的样式,需要编辑 Mapbox Draw 的样式表。 以下是一个简单的示例,演示如何使用 Mapbox Draw 绘制一个点、一条线和一个多边形,并修改其样式: ```html <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>Mapbox Draw Style</title> <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> <script src='https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.js'></script> <link href='https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.css' rel='stylesheet' /> <script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.3.0/mapbox-gl-draw.js'></script> <link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.3.0/mapbox-gl-draw.css' type='text/css' /> <style> #map { height: 500px; } </style> </head> <body> <div id='map'></div> <script> mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN_HERE'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [-122.4194, 37.7749], zoom: 13 }); var draw = new MapboxDraw({ displayControlsDefault: false, controls: { point: true, line_string: true, polygon: true, trash: true }, styles: [ // 修改点的样式 { id: 'custom-point', type: 'circle', paint: { 'circle-radius': 8, 'circle-color': '#ff0000' }, filter: ['in', '$type', 'Point'] }, // 修改线的样式 { id: 'custom-line', type: 'line', paint: { 'line-color': '#00ff00', 'line-width': 4 }, filter: ['in', '$type', 'LineString'] }, // 修改面的样式 { id: 'custom-polygon', type: 'fill', paint: { 'fill-color': '#0000ff', 'fill-opacity': 0.5 }, filter: ['in', '$type', 'Polygon'] } ] }); map.addControl(draw); map.on('draw.create', function(e) { console.log(e.features); }); </script> </body> </html> ``` 在上面的示例中,我们定义了三个不同类型的样式:`custom-point`、`custom-line` 和 `custom-polygon`。通过修改这些样式的 paint 属性,我们可以改变它们的外观。在这个例子中,我们将点的颜色修改为红色,将线的颜色修改为绿色,将面的颜色修改为蓝色,并调整了它们的大小和透明度。 注意,我们还需要在 Mapbox 地图中添加 `mapbox-gl-draw` 控件,以便用户可以在地图上绘制图形。在上面的代码中,我们通过 `map.addControl(draw)` 将 `MapboxDraw` 实例添加到地图上。 当用户在地图上绘制点、线或多边形时,`draw.create` 事件将被触发,并将新绘制的要素作为参数传递给回调函数。在这个例子中,我们简单地将要素打印到控制台上,以便您可以看到它们的结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值