MFC中创建透明画刷

MFC绘图可以很明显的看到先前画的矩形会被后来画的矩形所覆盖掉,这时候我需要后来画的矩形透明。那么我们要怎么来实现呢?

方法一

可以利用GetStockObject 这个函数来实现,GetStockObject 函数获取的是一个画刷句柄。

//创建透明画刷
RECT rect;
rect.top = 0;
rect.left = 0;
rect.right = 100;
rect.bottom = 100;
static HBRUSH m_brush;  //画刷句柄
m_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
//将空画刷选入设备描述表  
 SelectObject(hdc, m_brush);
 //绘制一个矩形  
 Rectangle(hdc, one_w, y, one_w + 100, y+100);//绘制一个填充为RGB(60,38,99)的矩形

以上虽然能实现看到先前绘制的矩形,但是我想要的是颜色透明。显然方法一是不能满足我的,找了很多资料并没有解决,希望看到的网友能赐教,感谢!!!
颜色透明实现不了那我们更换思路,添加背景色。

方法二

使用函数SetBkColor,SetBkMode设置整个窗口的背景色。SetBkColor是背景颜色,SetBkMode是背景模式。

// SetMode 模式
SetBkColor(hdc, RGB(255, 255, 0));
SetBkMode(hdc, TRANSPARENT);
TextOutA(hdc, 256, 24, "hello world", 11);
// 非SetMode模式
SetBkColor(hdc, RGB(255, 255, 0));
// SetBkMode(hdc, TRANSPARENT);
TextOutA(hdc, 256, 24, "hello world", 11);

注意:此方法只能用于文本,填充画刷和画笔不是实线时。看下图


ponglyon.png

测试代码:

//setp2
SetBkColor(hdc, RGB(255, 255, 0));
TextOutA(hdc, 0, 600, "hello world", strlen("hello world"));
//SetBkMode(hdc, OPAQUE);
//1.用m_brush填充矩形
static HBRUSH m_brush;  //画刷句柄 用来填充图形
m_brush = CreateHatchBrush(HS_BDIAGONAL, RGB(255, 255, 255));
RECT rect;
rect.top = 600;
rect.left = 100;
rect.right = 100 + 100;
rect.bottom = 600 + 100;
FillRect(hdc, &rect, m_brush);
//2.用虚线画笔画一条直线
HPEN hPen;
hPen = CreatePen(PS_DASH, 1, RGB(0, 255, 0));
SelectObject(hdc, hPen);
MoveToEx(hdc, 300, 600, NULL);
LineTo(hdc, 400, 0);

方法二会将整个窗口添加上背景色,不理想。

方法三

FillRect()函数:用指定的画刷填充矩形, 函数包括矩形的左上边界,但不包括矩形的右下边界。

RECT rect;
rect.top = one_w;
rect.left = y;
rect.right = one_w + 100;
rect.bottom = y+ 100;
static HBRUSH m_brush;  //画刷句柄 用来填充图形
m_brush = CreateHatchBrush(HS_BDIAGONAL, RGB(255, 255, 0));
FillRect(hdc, &rect, m_brush);

在线求更完美创建透明颜色画刷的方法!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容