C# 调用SetROP2实现橡皮线效果

  C# 调用SetROP2实现橡皮线效果 
   
    郭胜涛 mailtogst@163.com

 DotNet Framework的GDI+较GDI添加了新的功能并对现有的功能进行了优化,
但是Graphics类中没有提供实现类似GDI中SetROP2函数来更改绘图模式的功能。
在计算机图形应用程序开发过程中经常用到反色模式来实现用户交互活动线,
我们可以在.Net 开发环境调用非托管的Win32 API 来实现上述的功能。

   先来看实例代码:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Runtime.InteropServices;

namespace  Win32APIDraw
{
    
/// <summary>
    
/// 封装交互线效果的类
    
/// </summary>

    public class Win32XORPenDrawer : IDisposable
    
{
        
声明Win32 api

        
构造函数

        
私有成员

        
公共接口
    }

}

 代码分析:
  1 首先声明用到的Win32 API 函数.
  主要用到GetDC, ReleaseDC, SetROP2, LineTo, MoveToEx几个函数,如果需要扩充其他交互效果
 (如画弧)还要增加相应的API函数声明。
  我们使用SetROP2函数来设置画笔的反色效果。

  2 这个类的构造函数中传入图形设备的句柄和绘图模式,可以是窗体或打印机, 也可以是承载其他画图效果控件
的。当绘图模式参数传入值是6时,就是反色效果。因为在构造函数中我们调用了SetROP2函数。
  这和在VC++中的实现方法是一致的。
 
  3 声明相应的画线方法,调用Win32API画线。

  最后要注意的是,在c#环境下必须注意释放通过win32API中创建的非托管资源,因此,我们使这个类实现
IDisposable接口。
       

运行效果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值