首页 »VB教程 » vb编程:VB使用编程窍门技巧 3则 »正文
vb编程:VB使用编程窍门技巧 3则
来源: 发布时间:星期四, 2009年1月15日 浏览:41次 评论:0
1、VB中实现动态移动Control控件 窗体中 Control控件如按钮、文本框等 般在运行时位 置是固定不变 但为了能给用户更方便 功能 我们可以做到在运行时动态移动Control控件 位置 比如我们可以允许用户随便将按钮放到自己喜欢 位置 而并非界面中固定 位置 其实这个功能实现起来是很容易 只需要使用API SendMessage传递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下 窗口 般都可以通过鼠标拖动来扩 大 有些时候我们需要控制窗口 比例不变 以防窗口比例失调时造成界面 不协调 要做 到这 点 可以利用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 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
相关文章
读者评论
发表评论
|
|