专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » vb编程:VB使用编程窍门技巧 3则 »正文

vb编程:VB使用编程窍门技巧 3则

来源: 发布时间:星期四, 2009年1月15日 浏览:41次 评论:0
  1、VB中实现动态移动Control控件  窗体中Control控件如按钮、文本框等般在运行时位 置是固定不变但为了能给用户更方便功能我们可以做到在运行时动态移动Control控件 位置比如我们可以允许用户随便将按钮放到自己喜欢位置而并非界面中固定位置 其实这个功能实现起来是很容易只需要使用APISendMessage传递Control控件移动消息 即可

  下面是个例子当用户单击按钮后可以移动按 钮位置

  在窗体总体声明部分声明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下窗口般都可以通过鼠标拖动来扩 大有些时候我们需要控制窗口比例不变以防窗口比例失调时造成界面不协调要做 到这可以利用APICallWindwosProc当得到用户调整窗口消息时判断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
Dim_aspectAsSingle
Ifmsg=WM_WINDOWPOSCHANGINGThen
IflParam.cy>0Then
保存原来比例
IfNotdone_beforeThen
aspect=lParam.cx/lParam.cy
done_before=True
EndIf
_aspect=lParam.cx/lParam.cy
If_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、使用系统“有关”对话框

  也许你在软件Software中需要个“有关”对话框如果要 求不高可以不必再用个窗体做“有关”对话框可利用系统对话框虽然其中含有 微软些信息但你还是可以添加自己某些信息系统提供“有关”对话框还有内存、 资源等有关信息你不需再为这些信息写任何代码要使用系统“有关”对话框只需声明API ShellAbout然后直接即可例如:

声明API
PrivateDeclareFunction
ShellAboutLib"shell32.dll"_
Alias"ShellAbout"(ByValhwnd
AsLong,ByValszAppAsString,_
ByValszOtherStuffAsString,
ByValhIconAsLong)AsLong
在需要地方使用它:
PrivateSubABOUTCd_Click
x=ShellAbout(Form1.hwnd,
"人事管理软件Software2.0",_
"新天地软件Software工作室",Form1.Icon)
EndSub




0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: