教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> VB >> VB使用编程技巧三则 RSS订阅
VB使用编程技巧三则
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
1、VB中实现动态移动控件
  窗体中的控件如按钮、文本框等一般在运行时位 置是固定不变的,但为了能给用户更方便的功能,我们可以做到在运行时动态移动控件的 位置,比如我们可以允许用户随便将按钮放到自己喜欢的位置,而并非界面中固定的位置。 其实这个功能实现起来是很容易的,只需要使用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"_
(   alhwndAsLong,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,
"人事管理软件2.0",_
"新天地软件工作室",Form1.Icon)
EndSub

来源:upschool.cn
作者:
关键字:
发表日期:2006-12-20 21:15:15

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:用VB编写DirectX7.0游戏(一)   下一篇:VB中防止将重复项目添加到列表框控件中


2009-1-10 9:29:58
本文的相类似文章
在学习中进步 在进步中成长 教程中国相随您的成长之路
华腾联合科技股份有限公司版权所有
广告联系:Rosibo@163.com