ExtFloodFill坚持使用Color white

时间:2016-10-14 07:39:03

标签: c++ mfc

因此,当用户使用ExtFloodFill按下带有下面代码的按钮时,我一直在尝试以编程方式重新绘制位图

CDC* cdc = GetDlgItem(IDC_MAP_STATIC)->GetDC(); // Get the CStatic that contains the bitmap
cdc->SetDCBrushColor(COLOR_SKYBLUE);            // constant for #00EEEE
SetDCBrushColor((HDC)cdc, COLOR_SKYBLUE);       // Trying to change the cdc brush color
// Just for debugging, i have inspected it and the value is the same with the COLOR_SKYBLUE value           
COLORREF cr = cdc->GetDCBrushColor();
cdc->ExtFloodFill(x,cdc->GetCurrentPosition().y+y, RGB(0, 0, 0), FLOODFILLBORDER);

但每次我调用ExtFloodFill时,FloodFill只会填充白色区域,并按照文档

  

使用当前画笔填充显示表面的一个区域。

我尝试用天蓝色改变当前的CDC画笔颜色。但它根本不起作用。

IDC_MAP_STATIC是一个常见的CStatic对象。我没有使用子类CStatic。

那么我在哪里做错了导致ExtFloodFill继续使用white而不是skyblue来填充我的位图?

1 个答案:

答案 0 :(得分:0)

没关系,用这个片段马上解决了。我不知道为什么,但是当我使用SetDCBrushColor设置画笔颜色时,它不会更改所选画笔。因此,对于基于this文章的代码,我尝试声明一个新画笔并在我尝试FloodFill之前选择它

CDC* cdc = GetDlgItem(IDC_MAP_STATIC)->GetDC();
CBrush cb(RGB(255, 0, 0)); //Make a new CBrush (Red)
cdc->SelectObject(&cb);    //Assign the CBrush to the CDC
cdc->ExtFloodFill(x,y, RGB(0, 0, 0), FLOODFILLBORDER);
DeleteObject(cb);
ReleaseDC(cdc);