VB使用编程技巧三则
2018-06-17 17:12:50来源:未知 阅读 ()
----窗体中的控件如按钮、文本框等一般在运行时位置是固定不变的,但为了能给用户更方便的功能,我们可以做到在运行时动态移动控件的位置,比如我们可以允许用户随便将按钮放到自己喜欢的位置,而并非界面中固定的位置。其实这个功能实现起来是很容易的,只需要使用API函数SendMessage传递控件移动的消息即可。
----下面是一个例子,当用户单击按钮后可以移动按钮的位置。
----在窗体的总体声明部分声明SendMessage函数及用到的两个常量:
PrivateDeclareFunctionSendMessage
Lib"user32"Alias_
"SendMessageA"(ByValhwndAs
Long,ByValwMsgAsLong,_
ByValwParamAsLong,lParamAsAny)AsLong
ConstWM_SYSCOMMAND=&H112
ConstSC_MOVE=&HF012
----在窗体中添加一命令按钮Command1,双击写代码如下:
PrivateSubCommand1_Click()
Dimretn
retn=SendMessage(Command1.hwnd,
WM_SYSCOMMAND,SC_MOVE,0)
EndSub
----在窗体中添加命令按钮Command2,双击写如下代码:
PrivateSubCommand2_Click()
unloadme
EndSub
----运行此程序,单击命令按钮1,然后移动鼠标可以发现按钮的边框跟随鼠标移动,在新位置处单击鼠标就可以按钮移动过去了,单击按钮2可结束程序。
----2、保持窗口的比例不变。
----WINDOWS下的窗口一般都可以通过鼠标拖动来扩大,有些时候我们需要控制窗口的比例不变,以防窗口比例失调时造成界面的不协调。要做到这一点,可以利用API函数CallWindwosProc,当得到用户调整窗口的消息时,判断X或Y方向上的比例是否和原来的比例一样,如果不一样,则调整为一样。下面是一个例子。
----在窗体中加一个命令按钮Command1,双击写如下代码:
PrivateSubCommand1_Click()
UnloadMe
EndSub
----双击窗体写如下代码:
PrivateSubForm_Load()
OldWindowProc=SetWindowLong(hwnd,GWL_WNDPROC,AddressOfNewWindowProc)
EndSub
----将下面的代码放入一个模块中:
OptionExplicit
PublicOldWindowProcAsLon
'声明API函数如下:
DeclareFunctionCallWindowProcLib
"user32"Alias"CallWindowProcA"_
(ByVallpPrevWndFuncAsLong,ByVal
hwndAsLong,ByValmsgAsLong,_
ByValwParamAsLong,lParamAs
WINDOWPOS)AsLong
DeclareFunctionSetWindowLongLib
"user32"Alias"SetWindowLongA"_
(ByValhwndAsLong,ByValnIndex
AsLong,ByValdwNewLongAsLong)AsLong
PublicConstGWL_WNDPROC=-4
'定义一个窗口位置数据类型
TypeWINDOWPOS
hwndAsLong
hWndInsertAfterAsLong
xAsLong
yAsLong
cxAsLong
cyAsLong
flagsAsLong
EndType
PublicConstWM_WINDOWPOSCHANGING=&H46
PublicConstWM_WINDOWPOSCHANGED=&H47
'处理窗口变化的函数
PublicFunctionNewWindowProc
(ByValhwndAsLong,ByValmsgAsLong,_
ByValwParamAsLong,lParamAsWINDOWPOS)AsLong
Staticdone_beforeAsBoolean
StaticaspectAsSingle
Dimnew_aspectAsSingle
Ifmsg=WM_WINDOWPOSCHANGINGThen
IflParam.cy>0Then
'保存原来的比例
IfNotdone_beforeThen
aspect=lParam.cx/lParam.cy
done_before=True
EndIf
new_aspect=lParam.cx/lParam.cy
Ifnew_aspect>aspectThen
lParam.cy=lParam.cx/aspect
Else
lParam.cx=aspect*lParam.cy
EndIf
EndIf
EndIf
NewWindowProc=CallWindowProc
(OldWindowProc,hwnd,msg,wParam,lParam)
EndFunction
----运行此程序,当用鼠标拉窗体的边界扩大窗口时,将会发现另一边也相应地扩大,整个窗口的比例不变,单击command1结束程序。
----3、使用系统的“关于”对话框。
----也许你在软件中需要一个“关于”对话框,如果要求不高的话,可以不必再用一个窗体做“关于”对话框,可利用系统的对话框,虽然其中含有微软的一些信息,但你还是可以添加自己的某些信息,系统提供的“关于”对话框还有内存、资源等有关信息,你不需再为这些信息写任何代码。要使用系统的“关于”对话框,只需声明API函数ShellAbout,然后直接调用即可,例如:
'声明API函数
PrivateDeclareFunction
ShellAboutLib"shell32.dll"_
Alias"ShellAbout"(ByValhwnd
AsLong,ByValszAppAsString,_
ByValszOtherStuffAsString,
ByValhIconAsLong)AsLong
在需要的地方使用它:
PrivateSubABOUTCd_Click()
x=ShellAbout(Form1.hwnd,"VB编程乐园网站指南","博士电脑软件工作室",Form1.Icon)
EndSub->
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 在Windows98中使用VB5.0编程疑难一解 2018-06-17
- VB编程问与答 2018-06-17
- 怎样在VB中声明和使用API函数 2018-06-17
- 使用VB设计具有「动感」的命令图标栏 2018-06-17
- 为常量定义合适的类型 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash