2012-06-13 104 views
1

我想創建自己的本機win32 C++複選框,可以有一個透明的背景。這個想法是讓窗口/小部件看起來與Windows XP樣式複選框完全相同,只是它可以具有透明背景。繪製折線結果像素線

我的問題:當我爲我的文本框繪製刻度線時,「刻度線」看起來像素化和參差不齊 - 請參閱下面的圖片以瞭解它的外觀。它看起來不像實際的複選框打勾。

左邊的複選框是我,右邊是默認的Windows一個我試圖複製: enter image description here

我怎樣才能讓我的蜱光滑,沒有像素化。什麼是我可以用來繪製刻度的Win32 GDI函數。我應該使用位圖圖像而不是在GDI中繪製刻度嗎?目前我使用PolylineTo()繪製勾號。也許我應該使用PolylineToEx()?

任何意見將不勝感激。

代碼用於繪製蜱(這個代碼是在WM_PAINT):

HGDIOBJ hPen  = CreatePen(PS_SOLID, 2, RGB(45,45,45)); //ExtCreatePen(PS_COSMETIC, dwPenStyle[i], 1, &lb, 0, NULL); 
HGDIOBJ hPenOld = SelectObject(hdc, hPen); 
POINT tickPnts[3] = {{3,((height-CHECK_RECTH)/2)+6}, {5,((height-CHECK_RECTH)/2)+9}, {9,((height-CHECK_RECTH)/2)+2}}; 
MoveToEx(hdc, tickPnts[0].x, tickPnts[0].y, NULL); 
PolylineTo(hdc, tickPnts, 3); 
SelectObject(hdc, hPenOld); 
DeleteObject(hPen); 
+0

我的GDI +很生鏽,但我懷疑你可能想查看紋理畫筆的用法,並使用帶有alpha混合邊緣的小圓形紋理。您可以使用筆刷創建筆,然後像以前一樣繪製多段線。 – Rook

回答

2

Windows使用Marlett字體呈現複選框標記,窗口框架按鈕和其他可縮放的UI元素。您可以使用抗鋸齒渲染字體以獲得平滑的邊緣。

(這當然曾經是真正的反正,我不知道肯定在Windows 7新的窗口框架按鈕使用的字體做,但字體仍存在。)

GDI沒有做任何抗鋸齒,這就是爲什麼你的線看起來鋸齒狀。

+0

感謝您的信息。有沒有一種WinAPI C++方式可以使用Marlett字體繪製刻度線? –

+0

使用CreateFont創建字體句柄,將其選擇到設備上下文中並使用TextOut寫入文本。小寫字母'a'和'b'是Marlett中的蜱。 – arx