程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> VB編程技巧三則

VB編程技巧三則

編輯:VB6

1、VB中實現動態移動控件

窗體中的控件如按鈕、文本框等一般在運行時位 置是固定不變的,但為了能給用戶更方便的功能,我們可以做到在運行時動態移動控件的 位置,比如我們可以允許用戶隨便將按鈕放到自己喜歡的位置,而並非界面中固定的位置。 其實這個功能實現起來是很容易的,只需要使用API函數SendMessage傳遞控件移動的消息 即可。

下面是一個例子,當用戶單擊按鈕後可以移動按 鈕的位置。

在窗體的總體聲明部分聲明SendMessage函數及 用到的兩個常量:

Private Declare Function SendMessage
Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Const WM_SYSCOMMAND = &H112
Const SC_MOVE = &HF012

在窗體中添加一命令按鈕Command1,雙擊寫代碼 如下:

Private Sub Command1_Click()
Dim retn%
retn = SendMessage(Command1.hwnd,
WM_SYSCOMMAND, SC_MOVE, 0)
End Sub

在窗體中添加命令按鈕Command2,雙擊寫如下代 碼:

Private Sub Command2_Click()
unload me
End Sub

運行此程序,單擊命令按鈕1,然後移動鼠標可以 發現按鈕的邊框跟隨鼠標移動,在新位置處單擊鼠標就可以按鈕移動過去了,單擊按鈕2可 結束程序。

2、保持窗口的比例不變。

WINDOWS下的窗口一般都可以通過鼠標拖動來擴 大,有些時候我們需要控制窗口的比例不變,以防窗口比例失調時造成界面的不協調。要做 到這一點,可以利用API函數CallWindwosProc,當得到用戶調整窗口的消息時,判斷X或Y方 向上的比例是否和原來的比例一樣,如果不一樣,則調整為一樣。下面是一個例子。

在窗體中加一個命令按鈕Command1,雙擊寫如下 代碼:

Private Sub Command1_Click()
Unload Me
End Sub

雙擊窗體寫如下代碼:

Private Sub Form_Load()
OldWindowProc = SetWindowLong( hwnd, GWL_WNDPROC, _
AddressOf NewWindowProc)
End Sub

將下面的代碼放入一個模塊中:

Option Explicit
Public OldWindowProc As Lon
' 聲 明API 函 數 如 下:
Declare Function CallWindowProc Lib
"user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal
hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, lParam As
WINDOWPOS) As Long
Declare Function SetWindowLong Lib
"user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex
As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = -4
' 定 義 一 個 窗 口 位 置 數 據 類 型
Type WINDOWPOS
hwnd As Long
hWndInsertAfter As Long
x As Long
y As Long
cx As Long
cy As Long
flags As Long
End Type
Public Const WM_WINDOWPOSCHANGING = &H46
Public Const WM_WINDOWPOSCHANGED = &H47
' 處 理 窗 口 變 化 的 函 數
Public Function NewWindowProc
(ByVal hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, lParam As WINDOWPOS) As Long
Static done_before As Boolean
Static aspect As Single
Dim new_aspect As Single
If msg = WM_WINDOWPOSCHANGING Then
If lParam.cy > 0 Then
' 保 存 原 來 的 比 例
If Not done_before Then
aspect = lParam.cx / lParam.cy
done_before = True
End If

new_aspect = lParam.cx / lParam.cy
If new_aspect > aspect Then
lParam.cy = lParam.cx / aspect
Else
lParam.cx = aspect * lParam.cy
End If
End If
End If
NewWindowProc = CallWindowProc
( OldWindowProc, hwnd, msg, wParam, lParam)
End Function

運行此程序,當用鼠標拉窗體的邊界擴大窗口時, 將會發現另一邊也相應地擴大,整個窗口的比例不變,單擊command1結束程序。

3、使用系統的“關於”對話框。

也許你在軟件中需要一個“關於”對話框,如果要 求不高的話,可以不必再用一個窗體做“關於”對話框,可利用系統的對話框,雖然其中含有 微軟的一些信息,但你還是可以添加自己的某些信息,系統提供的“關於”對話框還有內存、 資源等有關信息,你不需再為這些信息寫任何代碼。要使用系統的“關於”對話框,只需聲明API 函數ShellAbout,然後直接調用即可,例如:

' 聲 明API 函 數
Private Declare Function
ShellAbout Lib "shell32.dll" _
Alias "ShellAbout" (ByVal hwnd
As Long, ByVal szApp As String, _
ByVal szOtherStuff As String,
ByVal hIcon As Long) As Long

在 需 要 的 地 方 使 用 它:

Private Sub ABOUTCd_Click()
x = ShellAbout(Form1.hwnd,
" 人 事 管 理 軟 件 2.0", _
" 新 天 地 軟 件 工 作 室", Form1.Icon)
End Sub

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved