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...