2016-10-14 82 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上,而不是做一個看似黑客的東西。 –