現(xiàn)在越來越多的軟件都有了很Cool的2D造型,什么×××× XP啦,×××× 2002之類的,看來爭(zhēng)奪軟件霸權(quán)的地位,2D界面是必不可少的,有很多人認(rèn)為Visual Basic語言的先天不足導(dǎo)致它不能夠很靈活的改變界面,讓俺們來看看究竟吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、新疆網(wǎng)站維護(hù)、網(wǎng)站推廣。
如果大家用過《Windows優(yōu)化大師》,肯定會(huì)被它的界面所傾倒,其實(shí)利用ActiveSkin 就可以辦到,甚至更爽,但是如果要做的共享軟件只是一個(gè)文件,在加上幾個(gè)OCX累贅,似乎很是不爽,看看VB是怎么利用別的東東來實(shí)現(xiàn)的吧。
首先新建一個(gè)EXE工程,再在窗體上拖幾個(gè)Label控件,看看Label 的強(qiáng)大功能吧,原理就是利用Label來模擬一個(gè)按鈕,但是首先要將Label控件的屬性要調(diào)一下,
Name: LblBtn,
BorderStyle: 1,
Appearance: 0,
Alignment: 2,
這樣一個(gè)按鈕的雛形就已經(jīng)出來了,如果工程量很大,可以將多個(gè)Label控件的Name屬性設(shè)為一樣的,對(duì)于按鈕的識(shí)別就要靠識(shí)別Index屬性了,為了方便起見,在進(jìn)入到代碼編輯窗口,輸入以下代碼:
Private Const LBL_BACK_COLOR = HE0E0E0 ’正常時(shí)Label控件的背景色
Private Const LBL_WHEN_MOUSE_MOVE = HC0C0C0 ’鼠標(biāo)移動(dòng)時(shí)Label的背景色
Private Const LBL_WHEN_MOUSE_DOWN = H808080 ’鼠標(biāo)按下時(shí)Label的背景色
再在Form的Load事件中輸入以下內(nèi)容
Private Sub Form_Load()
Dim Count As Integer
For Count = 0 To 3 ’請(qǐng)將此出的3換成你的LblBtn數(shù)量的個(gè)數(shù)-1
LblBtn(Count).BackColor=LBL_BACK_COLOR ’初始化LblBtn的背景
Next Count
End Sub
然后再在LblBtn的MouseMove和MouseDown事件中來搞定剩余部分:
Private Sub LblBtn_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) ’當(dāng)鼠標(biāo)按在LblBtn上時(shí)
LblBtn(Index).BackColor = LBL_WHEN_MOUSE_DOWN ’臨時(shí)改變LblBtn背景顏色
End Sub
Private Sub LblBtn_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) ’鼠標(biāo)在LblBtn上面移動(dòng)時(shí)觸發(fā)該事件
Dim Count As Integer
DoEvents ’暫時(shí)將系統(tǒng)控制權(quán)教給系統(tǒng)
If Button Then Exit Sub ’如果按鈕被按下就退出該過程
For Count = 0 To 3
If Count Index Then ’如果按下的不是其它按鈕
LblBtn(Index).BackColor = LBL_BACK_COLOR ’將背景設(shè)為正常
Else
LblBtn(Index).BackColor = LBL_WHEN_MOUSE_MOVE ’將背景設(shè)為鼠標(biāo)移動(dòng)的背景
End If
Next Count
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Count As Integer
DoEvents
For Count=0 To 3
LblBtn(Count).BackColor=LBL_BACKCOLOR ’恢復(fù)背景
Next Count
End
本來利用Windows的消息系統(tǒng)來完成這一“艱巨”的任務(wù)最簡(jiǎn)單,可問題就來了,Label控件沒有窗口句柄怎么辦?可是此問題與題無關(guān),寫了會(huì)有騙稿費(fèi)之:)
OK,Label控件就講到這里,在來說說TextBox控件,
各位看關(guān)恐怕看慣了白顏色的背景,那么就換換顏色以養(yǎng)養(yǎng)俺們那和綿羊一樣的眼睛(為什么說綿羊?俺也不知道),可是VB提供的RGB函數(shù)弄出來的顏色不是怎么好看,這里俺來教大家一個(gè)小Tip,RGB函數(shù)的Red,Green,Blue這三個(gè)參數(shù)若一樣,則產(chǎn)生的顏色是灰度,當(dāng)然越接近白顏色越好,但也不能讓各位看不出來,俺建議TextBox的背景為RGB(235,235,235),各位還是實(shí)戰(zhàn)一下,將一個(gè)TextBox拖到窗體上,屬性設(shè)置如下
Appearance 0
BorderStyle 1
MutilLine True
千萬不要設(shè)置ScrollBars屬性,否則會(huì)影響效果
在Form的Load事件中初始化TextBox
Dim bkColor As Long
Private Sub Form_Load()
bkColor=RGB(235,235,235)
Text1.BackColor=bkColor
End Sub
在Form和Text1的MouseMove事件中:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.BorderStyle = 0
End Sub
Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
DoEvents
Text1.BorderStyle = 1
End Sub
在按下F5試試是不是很Cool?
可能各位看關(guān)玩過石器時(shí)代,一定會(huì)對(duì)里面的TextBox的效果感到很爽,VB還不是可以做到,有焦點(diǎn)的控件可以使用SetFocus方法來為其設(shè)置焦點(diǎn),可是一個(gè)窗體上如果控件太多了,一個(gè)一個(gè)的用SetFocus是不是太傻了?這一節(jié)的主角就是--------API函數(shù),
首先聲明:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
但是這里的SetFocus會(huì)和控件的SetFocus會(huì)搞混淆,改改吧,
Private Declare Function nSetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
只要Alias指向的接口是對(duì)的前面的函數(shù)名稱簡(jiǎn)直就是擺設(shè),
在建立一個(gè)過程:
Public Function sSetFocus() As Long
Dim CPos As POINTAPI,Successfull As Boolean,hWnd As Long
DoEvents
Successfull =GetCursorPos(CPos)
If Not Successfull Then Exit Sub ’如果未成功則退出該過程
hWnd=WindowFromPoint(CPos.x,CPos.y)
sSetFocus=nSetFocus(hWnd)
End Sub
在窗體上放一個(gè)Timer控件,Interval 屬性設(shè)為100,就是0.1秒,在Timer1控件的Timer事件中填入sSetFocus,在運(yùn)行一下看看,效果怎么樣?
可是有的先生小姐要問了,TextBox難道就不能用ScrollBar嗎?非也非也,選 工程-部件-Microsoft Windows Common Controls-2 6.0 (SP3)就是你的答案,至于卷動(dòng)TextBox就去研究SendMessage函數(shù)吧,否則又有騙稿費(fèi)之嫌,如果想作綠色軟件,不想用控件,可以用俺前面講到的Label控件,利用字體 Webdings 來模擬ScrollBar,需要注意的是,如果模擬ScrollBar,上下左右箭頭分別是5,6,3,4,別忘了把字體設(shè)為Webdings
再來講講窗體的美化,其實(shí)將BorderStyle屬性設(shè)為0就是很好的2D美化;)可是,這樣一來,問題又來了,怎么辦?凡事都要請(qǐng)API來幫忙,這里需要兩個(gè)API,一下是該API的聲明:
Public Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long '這個(gè)API是用來解下鼠標(biāo)的追蹤器,關(guān)于他的過多用法以及詳細(xì)介紹可以寫信向俺咨詢,
還有
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long’這個(gè)該不要俺多介紹了吧
Public Const HTCAPTION = 2 ’代表窗體的標(biāo)題區(qū)
Public Const WM_NCLBUTTONDOWN = HA1 ’表示非工作區(qū)左鍵按下
原理很簡(jiǎn)單,卸下鼠標(biāo)追蹤器后向Form發(fā)送一個(gè)移動(dòng)窗體的消息,其實(shí)做到這一點(diǎn)的方法很多,但俺個(gè)人認(rèn)為這一種最簡(jiǎn)單,添加一個(gè)過程:
Public Sub MoveForm(hWnd As Long)
DoEvents
ReleaseCapture
SendMessage hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0
End Sub
在Form的MouseMove事件中:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button=vbLeftButton Then MoveForm hWnd’如果按下鼠標(biāo)左鍵就移動(dòng)窗體
End Sub
臺(tái)下的這位小姐又納悶了,可是光禿禿的窗體沒有了標(biāo)題欄也不好看,俺要向這為小姐推薦俺的東東-ActiveX控件,ToolSign,需要的人可以寫信給俺聯(lián)系,
該控件需要在代碼編輯區(qū)域內(nèi)添加一下代碼:
’一下聲明是用在ToolSign的 AutoQuit屬性的
Public Const EXIT_FORCE = 2 ’注意,在VB中運(yùn)行的時(shí)候如果選用此退出方式,VB也會(huì)退出
Public Const EXIT_MESSAGE = 1 ’由操作系統(tǒng)發(fā)送關(guān)閉消息
Public Const EXIT_CUSTOM = Not (EXIT_FORCE Or EXIT_MESSAGE) ’自定義
將其注冊(cè)后在部件欄中把e-Dogkid Studio Tools Sign打鉤,添加到工具箱中,雙擊加入到窗體中,
在Form的Load事件中添加一下初始化代碼:
Private Sub Form_Load()
With Sign1
.AutoQuit = EXIT_CUSTOM
.ParentsHWND = hWnd ’填了此屬性可以直接用ToolSign來移動(dòng)窗體而不需要前面的代碼
End With
End Sub
Sign1的Click事件
Private Sub Sign1_Click()
End ’關(guān)閉程序
End Sub
在Form的Resize事件中添加一下代碼:
Private Sub Form_Resize()
Sign1.Width = Width
End Sub
如果想讓窗體可以改變大小,可以修改一下屬性
Caption ""
BorderStyle 2或5
ControlBox False
實(shí)際情況如圖
不知道各位看關(guān)見過爆炸試的窗體沒有?,沒有見過可以從俺要另外一個(gè)俺自己的ActiveX DLL,我的那個(gè)東東其實(shí)是給我的Software作運(yùn)行庫的,各位若不嫌棄,可以用用,注冊(cè)后在工程-引用-e-Dogkid Runtime Library
然后在窗體Load事件中輸入:
Private Sub Form_Load()
Dim System As e_Dogkid_Runtime_Library.System
Set System = New e_Dogkid_Runtime_Library.System
Show
System.BoomIt hDC, 60, Width, Height, Left, Top
Set System = Nothing
End Sub
設(shè)置backColor屬性為“TransParent”試試看。不過我不認(rèn)為這是個(gè)好辦法。
appFace不是一個(gè)專用于VB.NET/C#的控件,建議還是用其他的.NET控件好了。譬如Devexpress的相關(guān)控件。
不難的,vb.net的語言比vb的完整些而已。而且一樣可以利用英文的理解方法理解vb.net的代碼,相對(duì)來說,vb.net更容易。語法來看,vb多數(shù)是用縮寫的,而vb.net是用完整的單詞,更便于理解,而且API也簡(jiǎn)化了很多。
所以,vb轉(zhuǎn)vb.net是很容易上手的。
窗體?美化?你是winform還是webform?還是mvc模板?還是其他的?這個(gè)東西網(wǎng)上都有對(duì)應(yīng)的插件的哈,想要好看的話就用別人的插件吧,比起自己琢磨來的更直接,強(qiáng)行花時(shí)間在美化窗體上也沒有多大的意義。
去學(xué) WPF Windows Presentation Foundation(WPF)是微軟新一代圖形系統(tǒng),運(yùn)行在.NET Framework 3.0架構(gòu)下,為用戶界面、2D/3D 圖形、文檔和媒體提供了統(tǒng)一的描述和操作方法?;贒irectX 9/10技術(shù)的WPF不僅帶來了前所未有的3D界面,而且其圖形向量渲染引擎也大大改進(jìn)了傳統(tǒng)的2D界面,比如Vista中的半透明效果的窗體等都得益于WPF。在Windows Vista中,圖形系統(tǒng)已經(jīng)移出了內(nèi)核模式,并有自己的空間--WPF。WPF不再唯一依靠GDI圖形API,更多的依靠Direct3D處理圖形操作,盡量不用CPU進(jìn)行顯示,而是用顯示卡的圖形處理單元(Graphics Processing Unit, GPU),用矢量圖代替位圖。
網(wǎng)頁名稱:vb.net美化控件 vb程序界面美化
URL分享:http://jinyejixie.com/article30/dosspso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站、App開發(fā)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)