C 實現TrackBar控制項美化換膚

2021-06-10 06:22:24 字數 2097 閱讀 3779

trackbar控制項沒有像其他控制項那樣,直接提供給使用者重繪的函式,要實現個性化的trackbar控制項,一種方法是繼承control完全的自己實現,這種方法就是實現標準的windows控制項功能需要自己處理很多東西,例如:實現一樣的屬性、鍵盤的操作、滑鼠滾動改變trackbar的值等;另一種方法就是直接繼承trackbar控制項,利用trackbar的一些windows訊息,獲取trackbar控制項的資訊,然後自己完全重繪,這種方法的好處是保留trackbar控制項的標準操作和屬性,但是需要比較清楚的了解trackbar控制項的windows訊息。本文將介紹使用第二種方法實現對trackbar控制項的美化。

下面來了解一下實現trackbar控制項美化需要的一些api訊息。trackbar控制項相關的一些訊息都是以tbm(tackbar message)開頭的,在trackbar控制項的美化中,主要用到了以下三個訊息:

tbm_getchannelrect  獲取軌道的位置和大小。

tbm_getthumbrect  獲取滑塊的位置和大小。

tbm_getnumtics  獲取刻度的總個數。

要獲取這些資訊,只需要向trackbar控制項傳送相應的訊息即可,例如需要獲取取軌道的位置和大小:sendmessage(hwnd, tbm.tbm_getchannelrect, 0, ref trackrect)。

有了上面的知識,接下來就是重繪trackbar控制項了。重繪trackbar控制項,需要重寫wndproc函式,在wm_paint訊息實現重繪就行了:

protected override void wndproc(ref message m)

else

break;

default:

base.wndproc(ref m);

break;}}

複製**

來看看drawtrackbar函式,drawtrackbar函式的功能就是獲取trackbar控制項的一些資訊,然後分別呼叫四個函式來繪製trackbar控制項:

onrenderbackground函式,繪製trackbar控制項的背景。

onrendertick函式,繪製trackbar控制項的刻度。

onrendertrack函式,繪製trackbar控制項的軌道。

onrenderthumb函式,繪製trackbar控制項的滑塊。

這四個函式都是可以重寫的,如果想實現不同樣式的trackbar控制項,重寫這四個函式,進行相應的繪製即可。看看drawtrackbar函式的具體**:

private void drawtrackbar(intptr hwnd)

else

}using (painteventargs pe = new painteventargs(g, clientrectangle))

int ticks = nativemethods.sendmessage(hwnd, tbm.tbm_getnumtics, 0, 0);

if (ticks > 0)

using (painttickeventargs pte = new painttickeventargs(g, trackrectangle, tickposlist))

}using (painteventargs pe = new painteventargs( g, trackrectangle))

using (paintthumbeventargs pe = new paintthumbeventargs( g, thumbrect.rect, state))

g.dispose();

intptr hdc = nativemethods.getdc(hwnd);

nativemethods.bitblt( hdc, 0, 0, base.width, base.height,tempdc.hdc, 0, 0, 0xcc0020);

nativemethods.releasedc(hwnd, hdc);

tempdc.dispose();}

複製**

最後需要說明的是,擴充套件後的trackbar控制項還實現了乙個colortable屬性,只要通過colortable設定相應的顏色,就可以得到不同顏色效果的trackbar控制項了。

trackbar控制項的美化換膚到此就實現了,希望對你了解trackbar控制項的美化有所幫助。

美化type file 控制項

對於type file 而言是乙個不大好看的控制項。如果不美化他一下,總感覺自己的 有些缺乏了美感 上 class file box 樣式說明 上面的是用了乙個text和乙個按鈕去偽裝成了乙個type file 控制項 實則控制項本身為隱藏狀態 而怎麼實現點選即點控制項,就用到了絕對定位 filte...

介面美化 CStatic控制項的美化

靜態控制項也是比較常用的控制項,在vs開發環境中用的應該挺頻繁的吧。其實mfc中實現對視窗美化,主要依賴於重繪。static控制項也是個視窗,windows為其留有自繪的權利,可以設定其樣式為ss ownerdraw,windows就會把其繪製權利交給我們的 怎麼繪製就看我們的 了。mfc中更好的一...

微軟trackbar控制項的bug一例

微軟trackbar控制項的bug一例 設定trackbar的最大值最小值時,只能使用這種形式 trackbar1.minimum 50 trackbar1.maximum 50 或int minimum 50 int maximum 50 trackbar1.minimum minimum tra...