




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
普通的窗体都是方方的,使用API函数可以做出一些奇怪的形状。比如,窗体是圆角矩形,在中间挖一个椭圆形的洞。 先要理解一个重要的概念:区域。区域是描述设备场景中某一块的GDI对象,每个区域都有一个句柄。一个区域可以是矩形,也可以是复杂的多边形,甚至是几个区域组织在一起。窗体默认的区域就是我们看到的矩形,当然它并非一定要用这个默认的区域 现在开始,首先在窗体上做一个圆角矩形区域,这是窗体的大致轮廓。在圆角矩形里再确定一个椭圆形的区域,然后把这两个区域组织成一个区域,并设置窗体的区域为这个组织出来的区域。 CreateRoundRectRgn函数用于创建一个圆角矩形区域;CreateEllipticRgn用于创建一个椭圆区域;CombineRgn函数用于将两个区域组合为一个新区域;SetWindowRgn函数允许您改变窗口的区域。使用其他的函数还可以做出其他更奇怪的窗体。 源代码如下: Option Explicit API 函数声明 Private Declare Function CreateRectRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CreateRoundRectRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long Private Declare Function CreateEllipticRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib gdi32 (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function SetWindowRgn Lib user32 (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function DeleteObject Lib gdi32 (ByVal hObject As Long) As Long 常数声明 Private Const RGN_DIFF = 4 目标区域被设置为两个区域不相交的部分 模块级变量声明 Private OutRgn As Long 外边的圆角矩形区域 Private InRgn As Long 里边的椭圆区域 Private MyRgn As Long 圆角区域剪切掉椭圆区域后的区域,也是窗体最终的形状 Private Sub Form_Click() If OutRgn 0 And InRgn 0 And MyRgn 0 Then Exit Sub Dim w As Long, h As Long w = ScaleX(Form1.Width, vbTwips, vbPixels) h = ScaleY(Form1.Height, vbTwips, vbPixels) MyRgn = CreateRectRgn(0, 0, 0, 0) OutRgn = CreateRoundRectRgn(30, 30, w - 30, h - 30, 100, 100) InRgn = CreateEllipticRgn(100, 100, w - 100, h - 100) Call CombineRgn(MyRgn, OutRgn, InRgn, RGN_DIFF) Call SetWindowRgn(Form1.hWnd, MyRgn, True) Form1.BackColor = QBColor(4) End Sub Private Sub Form_DblClick() Unload Form1 End Sub Private Sub Form_Load() OutRgn = 0 InRgn = 0 MyRgn = 0 Form1.Width = 7800 Form1.Height = 6000 End Sub Private Sub Form_Unload(Cancel As Integer) If MyRgn 0 Then DeleteObject MyRgn If OutRgn 0 Then DeleteObject OutRgn If InRgn 0 Then DeleteObject InRgn End Sub 这个程序运行后,在窗体上单击,窗体就会变形,双击窗体程序结束。要注意的是,在卸载窗体时,用DeleteObject函数删除已定义的区域。 评论(0) 发表评论注释:不登录也可发表评论 主题: 奇形怪状的窗体 您的名字: *请输入6位的验证码。字母不区分大小写。验 证 码: *评论内容: *当有新的回复时,邮件通知您(登录后可生效)VBGood RSS 订阅 每周超过200个关于VB编程的精彩新话题,现在就订阅吧! RSS地址API手册 字母索引A B C D E F G H I K L M O P Q R S T U V W XAPI手册 分类 进程与线程类 控件和消息类 文档 文件处理类 位图、图标和光栅运算类 硬件与系统类函数 设备场景类 绘图类函数 打印类 文本和字体类 Windows消息类API手册 相关文章 屏蔽文本框默认的右键菜单浅谈如何控制Windows消息 使窗口总在最前 金山词霸启示录 金山词霸启示录定制系统菜单 金山词霸启示录通知栏图标 MessageBlaster32 Ole Control 使用说明 什么是子类处理技术? 奇形怪状的窗体随机文章 数据库的一些出口类型 设 计 窗 体 背 景 花 纹 VB6.0中通过MSChart控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏行业全景解析
- 手指课件内容
- 智能采收能耗优化-洞察及研究
- 不锈钢楼梯安装安全协议书7篇
- 统编版2025-2026学年语文六年级上册第一、二单元综合测试卷(有答案)
- 内蒙古锡林郭勒盟二连浩特市第一中学2024-2025学年九年级上学期期末检测化学试卷(无答案)
- 2025届安徽省安庆市安庆九一六高级中学高三下学期第5次强化训练物理试卷(含答案)
- 欧美医耗市场准入策略-洞察及研究
- 学生手机安全培训心得课件
- 扇形统计图说课稿课件
- 2026中国银行股份有限公司上海分行计划招聘550人考试参考题库及答案解析
- 2025纪念中国人民抗日战争胜利80周年心得体会五
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读
- 《电力建设施工企业安全生产标准化实施规范》
- GA/T 594-2006保安服务操作规程与质量控制
- 髋关节解剖资料课件
- 坚持男女平等基本国策(妇联培训)课件
- 颅脑外伤(共61张PPT)
- 人教版《生命.生态.安全》六年级上册全册教案
- 矿种代码与规模分类表
- 2022版义务教育语文课程标准解读之核心素养与课程目标PPT
评论
0/150
提交评论