| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
VB使用编程技巧三则http://www.iyit.net 日期:2006-4-29 22:30:02 来源: 点击: |
窗体中的控件如按钮、文本框等一般在运行时位 置是固定不变的,但为了能给用户更方便的功能,我们可以做到在运行时动态移动控件的 位置,比如我们可以允许用户随便将按钮放到自己喜欢的位置,而并非界面中固定的位置。 其实这个功能实现起来是很容易的,只需要使用API函数SendMessage传递控件移动的消息 即可。 下面是一个例子,当用户单击按钮后可以移动按 钮的位置。 在窗体的总体声明部分声明SendMessage函数及 用到的两个常量: PrivateDeclareFunctionSendMessage Lib"user32"Alias_ "SendMessageA"(ByValhwndAs Long,ByValwMsgAsLong,_ ByValwParamAsLong,lParamAsAny)AsLong ConstWM_SYSCOMMAND=%26H112 ConstSC_MOVE=%26HF012 在窗体中添加一命令按钮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=%26H46 PublicConstWM_WINDOWPOSCHANGED=%26H47 处理窗口变化的函数 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,然后直接调用即可,例如: 本新闻共2页,当前在第1页 1 2 编辑: [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:VB中任意旋转位图的实现 下一篇:用VB计算累计值 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||