2008-12-04 105 views
0

是的,就像iPhone上那些漂亮的按鈕。 ;)如何在WM6中創建圓角矩形按鈕?

我一直在尋找,現在讀了幾天,每次我找到的東西,會讓我接近(如CreateRoundRectRgn),它吹起來,因爲的Windows Mobile 6 GDI +不支持它。

我可以做整個業主畫東西等等。但是,我如何彎曲這些硬角並重塑一個按鈕? :/

注意工具可供選擇:只有本地Win32(無MFC)


這個想法已經發生在我,但它留下兩個問題:

1)不會與圓潤的位圖邊緣仍然可以看到按鈕的角落。

2)位圖很適合固定屏幕尺寸。但有了各種各樣的解決方案,我的目標是在運行時在內存中動態創建按鈕位圖並以此方式使用它。

我得到它與方形按鈕一起工作。然而,我看到了其他軟件使用的圓邊按鈕。有必須是一種重塑按鈕的方法。

回答

2

獲得漂亮的按鈕通常是通過完成所有者繪製的按鈕並繪製圖形設計器創建的圖像來完成的,而不是讓GDI執行任何控件繪製。你只需要一個「up」的圖像和一個「pressed」的圖像。您可以手動繪製焦點,也可以使用另一個帶有ROP遮罩的圖像將其繪製在按鈕上。要獲得漂亮的「圓潤」效果,只需使用背景色創建圖像,然後將其用作透明色。

因爲iPhone真的只有一個分辨率,所以TOM縮放問題對於WinMo來說有點獨特。如果您需要定位不同分辨率的WinMo設備,您可以執行以下兩項操作之一(您使用的取決於您使用的圖像)。 Eitehr只是繪製縮放的圖像,或包含不同大小版本的圖像,並根據屏幕分辨率決定在運行時使用哪種圖像。

1

您可以使用RoundRect GDI函數在所有者繪製的控件上執行此操作。

//Set up a brush and pen 
HBRUSH brush = CreateSolidBrush(RGB(255, 0, 0)); 
HPEN pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0)); 

//Select it 
HGDIOBJ old_brush = SelectObject(hdc, brush); 
HGDIOBJ old_pen = SelectObject(hdc, pen); 

//Draw your rectangle 
RoundRect(hdc, m_rect.left, m_rect.top, m_rect.right, m_rect.bottom, 10, 10); 

//restore the old state of your HDC 
SelectObject(hdc, old_brush); 
SelectObject(hdc, old_pen); 

//Clean up 
DeleteObject(brush); 
DeleteObject(pen); 

如果你想要做的事愛好者喜歡用漸變填充它,你可以畫出你的梯度關閉屏幕緩衝區並使用CreatePatternBrush從中得出。