mfc背景填充,透明画刷可以填充么

时间:2022-03-06 09:12:36
如题,我想做一个清除的功能,用dc.FillRect(&rect,&brush);
这里的brush初始化如下:

CBrush brush;
brush.CreateStockObject(WHITE_BRUSH);

这样结果是一个白背景的画布,我现在想得到一个透明背景的画布,能做到么?怎么做

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.FillRect(&Rect,pBrush);
好像没效果。

10 个解决方案

#1


还有这个,资源需要回收吗,怎么回收

#2


奇葩,正宗的

#3


引用 2 楼 gz_qmc 的回复:
奇葩,正宗的


有什么好办法不?

#4


自己学会百度吧,透明画刷

#5


引用 楼主 JianNuanDeDongYe 的回复:
如题,我想做一个清除的功能,用dc.FillRect(&rect,&brush);
这里的brush初始化如下:

CBrush brush;
brush.CreateStockObject(WHITE_BRUSH);

这样结果是一个白背景的画布,我现在想得到一个透明背景的画布,能做到么?怎么做

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.FillRect(&Rect,pBrush);
好像没效果。

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc->SelectObject(pBrush);
dc.FillRect(&Rect,pBrush);

#6


所谓透明画刷
就是空画刷
也就是啥也没有
也就是画的时候啥都不做

#7


引用 6 楼 gz_qmc 的回复:
所谓透明画刷
就是空画刷
也就是啥也没有
也就是画的时候啥都不做

我就是不想要白色背景。该怎么弄个透明的兼容dc呢

#8


不要白色,你可以要其他颜色啊

你的描述不清楚

你最好把你要的效果图用PHOTOSHOP先处理个样板发上来

才知道怎么帮你

#9


mfc 程序。一个绘图的程序,绘图背景用pic控件贴图,setbitmap设置背景图片 showwindow控制隐藏显示。 要求在两个场景可以分别绘图,在切换场景的时候能分别把刚才在此场景绘制过的图形显示出来。因此就需要两个兼容dc做一个双缓冲机制,而我做的切换动作时先showwindow显示背景,再贴兼容dc画过的内容,这样,兼容dc的画刷如果是白色,那就全把背景覆盖掉了。
就是这样;

#10


你的思路严重的有问题
既然,你的背景只是一幅图片
那么,为什么要用pic控件呢?
如果是我,绝对不用你这种非常不靠谱的做法

比如,绘图窗口是X(绝对不要在X上用另外一个窗口类,那样非常愚蠢)
那么,我会设置一个全局指针变量pic指向对应的背景图
另外有一个数据结构draw保存绘制的图形

在X窗口的OnPaint()里,只需要做两件事情
{
   1,显示背景图pic;
   2,绘画draw保存的图形;
}

而切换场景的代码非常简单
比如
void ChangeBack(int index)
{
    switch(index)
    {
         case 0:pic对应到第一幅图;break;
         case 1:pic对应到第二幅图;break;
         .........
     }
    Invalidate通知窗口重画
}

#1


还有这个,资源需要回收吗,怎么回收

#2


奇葩,正宗的

#3


引用 2 楼 gz_qmc 的回复:
奇葩,正宗的


有什么好办法不?

#4


自己学会百度吧,透明画刷

#5


引用 楼主 JianNuanDeDongYe 的回复:
如题,我想做一个清除的功能,用dc.FillRect(&rect,&brush);
这里的brush初始化如下:

CBrush brush;
brush.CreateStockObject(WHITE_BRUSH);

这样结果是一个白背景的画布,我现在想得到一个透明背景的画布,能做到么?怎么做

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.FillRect(&Rect,pBrush);
好像没效果。

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc->SelectObject(pBrush);
dc.FillRect(&Rect,pBrush);

#6


所谓透明画刷
就是空画刷
也就是啥也没有
也就是画的时候啥都不做

#7


引用 6 楼 gz_qmc 的回复:
所谓透明画刷
就是空画刷
也就是啥也没有
也就是画的时候啥都不做

我就是不想要白色背景。该怎么弄个透明的兼容dc呢

#8


不要白色,你可以要其他颜色啊

你的描述不清楚

你最好把你要的效果图用PHOTOSHOP先处理个样板发上来

才知道怎么帮你

#9


mfc 程序。一个绘图的程序,绘图背景用pic控件贴图,setbitmap设置背景图片 showwindow控制隐藏显示。 要求在两个场景可以分别绘图,在切换场景的时候能分别把刚才在此场景绘制过的图形显示出来。因此就需要两个兼容dc做一个双缓冲机制,而我做的切换动作时先showwindow显示背景,再贴兼容dc画过的内容,这样,兼容dc的画刷如果是白色,那就全把背景覆盖掉了。
就是这样;

#10


你的思路严重的有问题
既然,你的背景只是一幅图片
那么,为什么要用pic控件呢?
如果是我,绝对不用你这种非常不靠谱的做法

比如,绘图窗口是X(绝对不要在X上用另外一个窗口类,那样非常愚蠢)
那么,我会设置一个全局指针变量pic指向对应的背景图
另外有一个数据结构draw保存绘制的图形

在X窗口的OnPaint()里,只需要做两件事情
{
   1,显示背景图pic;
   2,绘画draw保存的图形;
}

而切换场景的代码非常简单
比如
void ChangeBack(int index)
{
    switch(index)
    {
         case 0:pic对应到第一幅图;break;
         case 1:pic对应到第二幅图;break;
         .........
     }
    Invalidate通知窗口重画
}