如何使用CreateSolidBrush方法在給定顏色的任何十六進制值的情況下在mfc應用程序中創建畫筆。CreateSolidBrush使用顏色的十六進制值
回答
CBrush newBrush;
COLORREF color = 0xFF00FFFF;
newBrush.CreateSolidBrush(color);
希望這會有所幫助。
這違反了[文檔](https://msdn.microsoft.com/en-us/library/dd183449.aspx):*「高位字節必須爲零。」* – IInspectable
CreateSolidBrush需要參數COLORREF。一個COLORREF
是一個DWORD
的別名,所以你可以只是一個值分配給它:
COLORREF color = 0xFF00FF;
HBRUSH hbr = ::CreateSolidBrush(color);
確保堅持記錄合同:
的高字節必須爲零。
一個更安全的替代方案將是使用RGB macro代替:
COLORREF color = RGB(0xFF, 0x0, 0xFF);
HBRUSH bhr = ::CreateSolidBrush(color);
RGB
的宏確保,使所得COLORREF
值符合需要的存儲器的佈局。
如果您需要從
COLORREF
(或
DWORD
)參數提取單個顏色分量,可以使用
GetRValue,
GetGValue,並
GetBValue宏:
DWORD dwCol = 0xFF00FF;
BYTE r = GetRValue(dwCol);
BYTE g = GetGValue(dwCol);
BYTE b = GetBValue(dwCol);
雖然這並工作,介紹架構特定的代碼。此時,您可以簡單地使用最初的DWORD
代替COLORREF
(如我的第一段所述)。
我找到了解決方案。
#define GET_RVAL(num) (num & 0xff0000) >> 16
#define GET_GVAL(num) (num & 0x00ff00) >> 8
#define GET_BVAL(num) (num & 0x0000ff)
創建使用
hBrush = CreateSolidBrush(COLORREF(RGB(GET_RVAL(0xbfbfbf), GET_GVAL(0xbfbfbf), GET_BVAL(0xebfbfbf))));
對不起,沒有。如果你覺得迫切需要編寫你自己的預處理宏,至少應該這樣做。在這種情況下:**總是**將整個表達式包裹在圓括號內。當然,重新發明輪子並不是非常有用(請參閱我的答案)。 – IInspectable
- 1. 轉換顏色的十六進制值
- 2. 訂購顏色的十六進制值
- 3. 使用十六進制值計算顏色組合
- 4. 使用.net數據註釋驗證顏色(十六進制值)
- 5. 如何使用十六進制顏色值在SSRS
- 6. 十三進制顏色的十六進制圖表
- 7. 用十六進制顏色尋找最近的PMS顏色?
- 8. 顯示十六進制顏色由SASS
- 9. Firefox十六進制顏色渲染
- 10. php str_replace十六進制顏色
- 11. 十六進制網頁顏色
- 12. 解析十六進制'0x0976b8'顏色android
- 13. rbg或十六進制選擇顏色?
- 14. 顏色十六進制計算
- 15. XHTML十六進制顏色要求?
- 16. R/Dygraphs十六進制顏色代碼
- 17. 顏色十六進制到imagefilledrectangle
- 18. 十六進制顏色字符串
- 19. 十六進制顏色範圍[java]
- 20. 創建十六進制顏色表
- 21. 十六進制顏色代碼多個#
- 22. 過濾器十六進制顏色
- 23. 十六進制顏色在Javascript
- 24. 比較在javascript中使用十六進制或十進制的顏色範圍
- 25. 使用C#對十六進制顏色進行排序#
- 26. Php函數十六進制或rgb顏色的顏色名稱
- 27. 用ffmpeg的showwaves使用十六進制顏色
- 28. 在JS中生成隨機生成的十六進制顏色的免費十六進制顏色?
- 29. 對十六進制顏色值進行排序
- 30. 將十六進制HTML顏色轉換爲Amiga colorregister十六進制(和後面)
MFC和GDI +是不同的庫刷。你在使用哪一個? – IInspectable