因此,当用户使用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来填充我的位图?
答案 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);