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);
注意:此方法只能用于文本,填充画刷和画笔不是实线时。看下图
测试代码:
//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);
在线求更完美创建透明颜色画刷的方法!!!