gpt4 book ai didi

c++ - MFC中使用TransparentBlt绘图

转载 作者:行者123 更新时间:2023-11-30 05:29:26 26 4
gpt4 key购买 nike

我想将 CRect 的 vector 绘制到设备上下文中。重叠的 CRects 应该以一种方式加起来,所有的交叉点都变成更亮的绿色。因此我想出了以下代码:

void Grid::tag(CDC* pDC){

CBrush brushGreen;
brushGreen.CreateSolidBrush(RGB(0, 100, 0));
CDC dcMemory;
dcMemory.SelectObject(&brushGreen);
dcMemory.CreateCompatibleDC(pDC);
for (size_t i = 0; i < taglist.size(); i++){
dcMemory.FillRect(taglist[i], &brushGreen);
pDC->TransparentBlt(frame.left, frame.top, frame.Width(), frame.Height(), &dcMemory, taglist[i].left, taglist[i].top, taglist[i].Width(), taglist[i].Height(),RGB(0,100,0));
}
DeleteObject(brushGreen);

}

不幸的是,结果是黑色的。似乎没有任何东西被吸引到 pDC 中。我究竟做错了什么?这是一个有效的开始方法吗?

最佳答案

在您的示例中,您必须用透明颜色填充内存 dc。这将初始化背景颜色,可以这么说。然后在内存 dc 上绘制并使用具有透明颜色的 TransparentBlt

void CMyWnd::OnPaint()
{
CWnd::OnPaint();
CClientDC dc(this);
CRect rc;
GetClientRect(&rc);

//paint any custom background
dc.FillSolidRect(&rc, RGB(200,200,255));

//choose a color which you don't otherwise need, use it for transparency
COLORREF transparent_color = RGB(1, 1, 1);

//create memory dc and initialize with transparent_color:
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rc.right, rc.bottom);
memdc.SelectObject(bitmap);
memdc.FillSolidRect(&rc, transparent_color);

//start custom drawing on memeory dc:
CBrush brushGreen;
brushGreen.CreateSolidBrush(RGB(0, 100, 0));
CRect small_rc(10, 10, rc.right - 10, 20);
memdc.FillRect(small_rc, &brushGreen);
//end custom drawing

//Finish by copying memeory dc to destination dc:
dc.TransparentBlt(0, 0, rc.Width(), rc.Height(),
&memdc, 0, 0, rc.Width(), rc.Height(), transparent_color);
}

关于c++ - MFC中使用TransparentBlt绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36396859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com