VC gdi实现在一副位图上画一个半透明的实心红色矩形,就是能看见位图的内容,不能遮盖他解决方法
VC gdi实现在一副位图上画一个半透明的实心红色矩形,就是能看见位图的内容,不能遮盖他
VC gdi实现在一副位图上画一个半透明的实心红色矩形,就是能看见位图的内容,不能看不到他的后面位图。
------解决方案--------------------
非常不好意思,好久没有上网了!
我已经把例子代码发过去了,请查收!
------解决方案--------------------
AlphaBlend这个函数绘图速度比较慢,这里有一个快捷的方式:
1. 先重载你的OnPaint()
2. 按如下代码,比如你的对话框是CTestDlg
void CTestDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcAlphaRect(0, 0, 300, 400);// 用于红色填充的矩形,可以如同轻纱一般遮挡对话框背景
int nsave = dc.SaveDC();
const unsigned short ChessBoard[] = {0xaa,0x55, 0xaa,0x55, 0xaa,0x55, 0xaa,0x55};
HBITMAP hBitmap = CreateBitmap(8,8,1,1,ChessBoard);
HBRUSH hBrush = CreatePatternBrush(hBitmap);
DeleteObject(hBitmap);
HGDIOBJ hOldBrush = SelectObject(dc.m_hDC,hBrush);
HGDIOBJ hOldPen = SelectObject(dc.m_hDC,GetStockObject(NULL_PEN));
// 以下2段代码是不同的!注意
dc.SetROP2(R2_MASKPEN);
dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.Rectangle(rcAlphaRect); // 线条矩形
dc.SetROP2(R2_MERGEPEN);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(RGB(255, 0, 0));// 线条颜色
dc.Rectangle(rcAlphaRect); // 矩形
SelectObject(dc.m_hDC,hOldBrush);
SelectObject(dc.m_hDC,hOldPen);
DeleteObject(hBrush);
dc.RestoreDC(nsave);
}
3. 以上代码是以对话框为容器的,同理,可以移植入 你自写的CStatic控件内,比如你的一个自写类叫
CMyPic public:CStatic
分别重载其CMyPic ::OnPaint() //在前景上绘制半透明的矩形
CMyPic ::OnEraseBkgnd(CDC* pDC) //实现插入背景
就可以了,这样说 你是否明白了呢?
VC gdi实现在一副位图上画一个半透明的实心红色矩形,就是能看见位图的内容,不能看不到他的后面位图。
------解决方案--------------------
非常不好意思,好久没有上网了!
我已经把例子代码发过去了,请查收!
------解决方案--------------------
AlphaBlend这个函数绘图速度比较慢,这里有一个快捷的方式:
1. 先重载你的OnPaint()
2. 按如下代码,比如你的对话框是CTestDlg
void CTestDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcAlphaRect(0, 0, 300, 400);// 用于红色填充的矩形,可以如同轻纱一般遮挡对话框背景
int nsave = dc.SaveDC();
const unsigned short ChessBoard[] = {0xaa,0x55, 0xaa,0x55, 0xaa,0x55, 0xaa,0x55};
HBITMAP hBitmap = CreateBitmap(8,8,1,1,ChessBoard);
HBRUSH hBrush = CreatePatternBrush(hBitmap);
DeleteObject(hBitmap);
HGDIOBJ hOldBrush = SelectObject(dc.m_hDC,hBrush);
HGDIOBJ hOldPen = SelectObject(dc.m_hDC,GetStockObject(NULL_PEN));
// 以下2段代码是不同的!注意
dc.SetROP2(R2_MASKPEN);
dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.Rectangle(rcAlphaRect); // 线条矩形
dc.SetROP2(R2_MERGEPEN);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(RGB(255, 0, 0));// 线条颜色
dc.Rectangle(rcAlphaRect); // 矩形
SelectObject(dc.m_hDC,hOldBrush);
SelectObject(dc.m_hDC,hOldPen);
DeleteObject(hBrush);
dc.RestoreDC(nsave);
}
3. 以上代码是以对话框为容器的,同理,可以移植入 你自写的CStatic控件内,比如你的一个自写类叫
CMyPic public:CStatic
分别重载其CMyPic ::OnPaint() //在前景上绘制半透明的矩形
CMyPic ::OnEraseBkgnd(CDC* pDC) //实现插入背景
就可以了,这样说 你是否明白了呢?