VB以其易于學(xué)習(xí)、易于開(kāi)發(fā)而深受廣大開(kāi)發(fā)人員的喜愛(ài),但是在實(shí)際開(kāi)發(fā)時(shí),我們也會(huì)遇到很多問(wèn)題,筆者總結(jié)了一些開(kāi)發(fā)中常見(jiàn)的問(wèn)題,給出了通用的解決方法,希望對(duì)VB開(kāi)發(fā)人員有所幫助。
問(wèn):在VB應(yīng)用程序中,如何實(shí)現(xiàn)窗體的簡(jiǎn)易移動(dòng)? 答:如果你的窗體不需要標(biāo)題欄,又希望能移動(dòng)該窗體,像WinAmp一樣簡(jiǎn)易移動(dòng),我們可以利用以下代碼實(shí)現(xiàn):
Declare Function ReleaseCapture Lib "user32" () As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA"(_ByVal hwnd As Long, ByVal wMsg As Long,_ByVal wParam As Long, lParam As Any) As Long Public Const HTCAPTION = 2 Public Const WM_NCLBUTTONDOWN = &&&&HA1
下面是將功能加入窗體的MouseDown事件中的代碼,你也可將其加入其它控件的事件中:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ReleaseCapture SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&&&&
利用以上代碼,我們就可實(shí)現(xiàn)窗體的簡(jiǎn)易移動(dòng)。
問(wèn):如何在桌面上畫(huà)圖標(biāo)? 答:下面一段程序利用了API函數(shù)在屏幕上實(shí)現(xiàn)畫(huà)圖標(biāo)功能(注:p是圖標(biāo)的句柄,可以由ExtractIcon取得)。
deskhwnd = GetNextWindow(hwnd, GW_HWNDLAST) '取最下面一個(gè)窗口 deskdc = GetWindowDC(deskhwnd) '取窗口的情景設(shè)備 For i=0 To Screen.Width/32/15 '將屏幕坐標(biāo)單位換算成“Pixel”,并計(jì)算可畫(huà)的圖標(biāo)數(shù) For j=0 To Screen.Height/32/15 DrawIcon deskdc, 32i, 32j, p '在桌面上畫(huà)圖 Next j Next i
用函數(shù)GetNextWindow取得其句柄,用函數(shù)GetWindowDC取出它的虛擬設(shè)備。需要注意的是,一旦窗口被覆蓋,圖標(biāo)就會(huì)消失。
問(wèn):在VB應(yīng)用程序中,如何取消窗體右上角的關(guān)閉功能? 答:如果你不想別人使用程序時(shí)直接用右上角的關(guān)閉功能來(lái)關(guān)閉程序,可用以下代碼來(lái)實(shí)現(xiàn)該功能。
在Form_Unload事件中加入以下代碼:
Private Sub Form_Unload(Cancel As Integer) Cancel=True End Sub
如果你想在關(guān)閉程序時(shí)提示是否關(guān)閉,可在Form_Unload事件中加入一個(gè)判斷語(yǔ)句: Private Sub Form_Unload(Cancel As Integer) Cancel=True Case Select msgbox "您真的想關(guān)閉嗎?" ,VbOkCancel Case VbOk Cancel=False Case Else Cancel=True End Select End Sub
問(wèn):如何讓VB應(yīng)用程序中的連接具有超級(jí)鏈接效果? 答:我們以一個(gè)網(wǎng)址鏈接為例,講解實(shí)現(xiàn)的方法。
首先我們新建一表單,在表單中加入一標(biāo)簽,Caption屬性為http://ccidnet.com/,MouseIcon值為操作系統(tǒng)下Curors目錄里的Hand.ico文件,MousePointer值為99。
在標(biāo)簽的MouseMove事件中加入如下代碼:
Label1.ForeColor=&&&&HFF
在表單的MouseMove事件中加入如下代碼:
Label1.ForeColor=&&&&HFF0000
在標(biāo)簽的Click事件中加入如下代碼:
Dim a As String a=Shell("Explorer.exe http://ccidnet.com/",3)
問(wèn):如何讀取外部圖標(biāo)? 答:下面的一段程序就顯示了如何讀取程序中的圖標(biāo),其中Picture1是一個(gè)圖像框,dlgOpen是一個(gè)標(biāo)準(zhǔn)對(duì)話框,Command1是一個(gè)按鈕;ExtractIcon函數(shù)有三個(gè)參數(shù),第一個(gè)參數(shù)指定調(diào)用的應(yīng)用程序,一般都用App.hInstance;第二個(gè)參數(shù)指定圖標(biāo)文件,可以是DLL、EXE和ICO;第三個(gè)參數(shù)的不同就決定了其返回值的不同,如果代入-1,就返回文件中包含的圖標(biāo)數(shù),代入0則返回第一個(gè)圖標(biāo)的句柄,其余依此類推。
Private Sub Command1_Click() Static total As Long,p(50) As Long,i As Integer dlgOpen.Filter = "圖標(biāo)|.Exe; .Ico;.Dll" dlgOpen.ShowOpen If Dir(dlgOpen.filename)<>"" Then If ExtractIcon(App.hInstance, dlgOpen.filename, -1) = 0 Then '如果沒(méi)有圖標(biāo) MsgBox "No Icon!" Else total = ExtractIcon(App.hInstance, dlgOpen.filename, -1) '取得總圖標(biāo)數(shù) For i = 0 To total - 1 p(i) = ExtractIcon(App.hInstance, dlgOpen.filename, i) '讀取每個(gè)圖標(biāo) Next i For i = 0 To total - 1 '依次顯示每個(gè)圖標(biāo) DrawIcon Picture1.hdc, 34 i, 0, p(i) Next i End If End If End Sub
|