2016-10-14 81 views
0

所以我一直在想,当用户按下一个按钮ExtFloodFill与下面的代码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将只填充的区域以编程方式重新绘制位图与白色和根据文档

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

我试图用颜色skyblue更改当前的CDC笔刷颜色。但它根本不起作用。

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

那么我在哪里做错了,它导致ExtFloodFill保持洪水填充我的位图与白色不skyblue?

回答

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); 
+1

您可能是泄漏的设备上下文,或销毁它,而仍然有选择的把它你的画笔。两人都没有好兆头。另外,答案并不能解释问题是什么,它如何解决并不完全有帮助。 – IInspectable

+0

你应该画在你自己的窗口的DC上,而不是做一个看似黑客的东西。 –