说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB利用API函数实现VB特殊窗体的两种方法

HTML文档下载 WORD文档下载 PDF文档下载
VB利用API函数实现VB特殊窗体的两种方法

   在VB集成开发环境(IDE)中,设计程序时所新建、添加的窗体都是矩形的。如果出于某种需要,想让窗体在运行时呈现出特殊的形状,就必须借助API函数编写相应的代码。
  [方法一]使用区域创建函数
  常用的区域创建函数有:
  CreateEllipticRgn
  '创建一个椭圆或圆形区域
  CreateRoundRectRgn
  '创建一个圆角矩形区域
  CreatePolygonRgn
  '创建一个由一系列点围成的区域
  CombineRgn
  '将两个区域组合为一个新区域
  SetWindowRgn
  '设置新的窗口区域。
  通过CombineRgn可以取两个区域的并集、交集等组合,从而创建出复杂形状的窗体。例如,以下程序得到的窗体形状为两个相连的月牙形:
  '例程1
  Option Explicit
  'API声明
  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
  '常数声明
  Const RGN_XOR = 3
  Private Sub Form_Load()
  Dim Rgn1, Rgn2
  Rgn1 = CreateEllipticRgn(100, 100, 400, 400)
  Rgn2 = CreateEllipticRgn(200, 100, 500, 400)
  CombineRgn Rgn1, Rgn1, Rgn2, RGN_XOR
  SetWindowRgn hWnd, Rgn1, 1
  End Sub
  [方法二]使用BeginPath、EndPath、TextOut、PathToRegion等函数
  BeginPath函数调用启动一个路径分支,在这个命令后执行的GDI绘图命令会自动成为路径的一部分,Windows95中合法的路径函数有文本绘图函数TextOut、绘制多边形函数Polygon等。
  EndPath函数用于结束定义一个路径,如果调用成功,BeginPath函数和它之间发生的所有绘图操作都将在指定设备场景的路径中生效。BeginPath函数一般与EndPath函数成对出现。
  PathToRegion函数调用将当前选定的路径转换到指定区域中。
  TextOut函数的声明如下:
  Declare Function TextOut Lib “gdi32" Alias“TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
  参数说明如下:
  hdc :设备场景的句柄 ;
  x,y :绘图的起点,采用逻辑坐标 ;
  lpString:欲绘制的字串 ;
  nCount:字串中要绘制的字符数量,一个汉字的字符数量为2 。
  以下程序生成一个宋体的“国”字形的窗体:
  '例程2
  Option Explicit
  '类型声明
  Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
  End Type
  'API声明
  Private Declare Function BeginPath Lib “gdi32" _
   (ByVal hdc As Long) As Long
  Private Declare Function TextOut Lib “gdi32" _
  Alias“TextOutA" (ByVal hdc As Long, _
  ByVal X As Long, ByVal Y As Long, _
  ByVal lpString As String, _
  ByVal nCount As Long) As Long
  Private Declare Function EndPath Lib “gdi32" _
  (ByVal hdc As Long) As Long
  Private Declare Function PathToRegion Lib“gdi32" _
  (ByVal hdc As Long) As Long
  Private Declare Function GetRgnBox Lib“gdi32" _
  (ByVal hRgn As Long, lpRect As RECT) As Long
  Private Declare Function CreateRectRgnIndirect Lib “gdi32" _
  (lpRect As RECT) 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 Const RGN_AND = 1
  Private Declare Function DeleteObject Lib“gdi32" _
  (ByVal hObject 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 ReleaseCapture Lib“user32" _
  () As Long
  Private Declare Function SendMessage Lib “user32" _
  Alias “SendMessageA" (ByVal hwnd As Long, _
  ByVal wMsg As Long, ByVal wParam As Long, _
  lParam As Any) As Long
  PrivateConst WM_NCLBUTTONDOWN = &HA1
  Private Const HTCAPTION = 2
  '窗体代码
  Private Sub Form_Load()
  Dim hRgn1, hRgn2 As Long
  Dim rct As RECT
  With Me
  .Font.Name = “宋体"
  .Font.Size = 200
  .FontTransparent=true
  '读者可设置为False观察其效果
  End With
  BeginPath hdc
  '为窗体形状产生路径
  TextOut hdc, 10, 10,“国", 2
  EndPath hdc
  hRgn1 = PathToRegion(hdc)
  '将指定路径转换为区域
  GetRgnBox hRgn1, rct
   '获取完全包含指定区域的最小矩形
  hRgn2 = CreateRectRgnIndirect(rct) '创建rct确定的矩形区域
  CombineRgn hRgn2, hRgn2, hRgn1, RGN_AND
   DeleteObject hRgn1
  '删除GDI对象,释放占用的系统资源
  SetWindowRgn hwnd, hRgn2, 1
  End Sub
  Private Sub Form_MouseDown(Button As Integer, Shift _
  As Integer, X As Single, Y As Single)
  '移动窗体
  ReleaseCapture
  SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0
  End Sub
  Private Sub Form_DblClick()
  '卸载窗体
  Unload Me
  End Sub
  如果想得到各种图案窗体,可以将窗体字体属性设置为Webdings、Wingdings、Wingdings1、Wingdings2、Wingdings3、Monotype Sorts等,这些字体中包含大量的图形字符,例如,Webdings字体下,代码“TextOut hdc, 10, 10, ‘J’, 1”可以得到风景画轮廓的窗体;Windings字体下,代码“TextOut hdc, 10, 10, ‘(’, 1 ” 可以得到电话形状的窗体。通过Windows附件中的字符映射表能够方便地浏览或选择、复制适用的字符。需要提醒的是,程序运行的机器中必须装有该字体。
  对比两种方法,方法一适合于创建几何形状简单的窗体,复杂的窗体理论上虽然可以实现,但操作起来比较困难。方法二简单易行,虽然有一定的局限性,但能够使窗体具有各种字体中各个字符的形状(你甚至可以利用造字程序自己“画”一些图形),还是很令人兴奋的。
  创建特殊窗体时,需要注意以下几点:
  1.如果窗体的Borderstyle属性没有设置为None,即使运行时标题栏不可见,但相应的键盘操作,如“Alt+空格键”、“Alt+F4”等依然有效;如果Borderstyle属性为None,最小化、窗体移动、退出等功能必须编写相应的代码来实现。当然,使用特殊窗体制作软件封面就不需要考虑那么多了。
  2.因为没有常规矩形窗体的立体边框效果,窗体的背景色应尽量采用醒目的颜色。
  3.特殊窗体的使用必须得当,用得好自然锦上添花,否则给人以哗众取宠之感。(北京 冯新强)
移动开发者的自学宝典:十大在线编程学习网站 MIT新技术:远程触摸和操纵实物 创新人机交互 中国移动研究院业务支撑研究所所长孙少陵:大数据实时处理技术发展趋势及中国移动实践和展望 “第一届中国大数据技术创新与创业大赛”主办方发言及创新分赛颁奖 中国移动研究院业务支撑研究所所长孙少陵:大会及与会嘉宾介绍 中国工程院院士、大数据专家委员会主任李国杰:能挖掘出价值的数据就是好数据 阿里飞天平台总架构师唐洪:飞天开放平台 百度大数据首席架构师林仕鼎:新计算时代 金山发布全系列IaaS平台 Google无人驾驶汽车与机器人组合,秒杀无人机 Google欲推新Chrome应用:适用于Android、iOS平台 comScore:美国市场苹果手机独占鳌头 Android和iOS双寡头垄断 一周消息树:新技术实现远程触摸和操纵实物 创新人机交互 研发周报:帮助网站转换的六大黑色星期五规则 【开源专访】JFinal作者詹波:以极简方式实现Web项目的极速开发 2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 12月9日:计算机软件第一夫人Grace Hopper出生 触摸屏将成笔记本标配 电脑行业或将迎来又一春 触摸4G,你必须要知道的那些事儿 TIOBE 2013年12月编程语言排行榜:Transact-SQL冲刺年度语言 敏捷开发的6个实战经验 【图文】走近华为企业业务与支撑万人技术团队的云数据中心 《习惯联盟》陈晓冬:与京东云合作让我们没有后顾之忧 流计算与批处理同现:畅享大数据时代的开源实践 挑战和机遇并存:大数据时代机器学习与可视化 【企业开源系列】收发一条Twitter推文的背后 在IE11中更快地获得您需要的内容 暴露程序员身份的8个行为 英特尔创新应用大赛大评审!创新也有中国风 jsp、oracle8.1.6的中文问题 在线等待 关于重新启动计算机的问题,谁能帮我? 各位,帮忙看看!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! daehappy进来取分,感谢给分! 各位大虾,有谁知道oracle8i,oracle9i是如何报价的,非常感谢! daehappy进来取分,感谢给分! daehappy进来取分,感谢给分! 如何驗証日期類型? 打包是如何解决vcl60的错误? 很急,谢谢 请问:单文档中如何在退出时去掉弹出的“是否保存文件“消息? 还没有见过这样的贴子,但又在实践中经常碰到的问题,怪事。。。。 ??IDispatch error #3101:什么意思?? 怎样实现程序中的取消功能 各位,上海哪边的房子便宜一点?(700左右,房内只要有简单家俱即可!) 一个<xsl:if>的问题 vc6.0 能否直接编译.mak文件?该如何配置? 关于XP中的PF使用率和字体占用内存的问题 有关安装nt server的问题 有关安装nt server的问题 关于数据库用户的问题! 很奇怪的现象,有人知道吗? 初级问题 电脑自动重启,有点难度,高手请进,如果对,绝对给分! 怎样用DAO或ADO访问EXCEL数据表? 请问该事件可以通过发送消息或其他的方法来触发吗? 有没有关于开发控件的文章和例子,请各位大侠帮忙!!! 告诉那有免费的数字化软件马上送分200 请问哪里有 Remote Authentication Dial In User Service (RADIUS)的资料或原码? 我怎么不能看你们的问题啊 关于数据库 window.parent.oa_middle.oa_userlist.document.location.reload();报错:对像为空或不存在 看如下的sql语句如何才能够把结果显示在grid内? 准备学习j2ee, 大家推荐些网站和书籍,我准备狂啃二个月!对了,我连它的开发工具还不知道呢,是不是还用jbuilder? 初学者,如何在C++ Builder中打印? DCOM编程要求在客户端安装DCOM,怎样安装DCOM,怎样判断是否安装了DCOM? 很小的小问题关于winsock 电话语音卡支持adpcm文件格式的直接播放吗? 关于Access数据库的两个问题,急! 一个初学者的简单问题。 大家好,一个小技术问题,不知道怎魔办? 两句的代码都出现问题!憋闷 高分寻求《数据结构-C++语言描述》书友,来者有分 谁知道哪儿能下载access的jdbc驱动程序吗? 好消息,Win2000下自定义报表问题! ATL里使用静态库的问题 我看不见你们问题的内容 试试难不难??HELP 请问如何禁止浏览器的退回按钮 怎样在客户端实现连接服务器的数据库,不装oracle的客户端 怎么获得地址 怎样使UltraEdit可以编译Java? 生理盐水的浓度是重量比吗? 生理盐水的浓度? 世界上寿命最短的动物和植物是什么啊 我好象听说过有一种 蛾 的生命只有几个小时具体记不清了 关于生理盐水的浓度问题,急生病了,都要去掉盐水,如果说盐水的浓度偏高或偏低人体会怎么样?如果换成水会怎么样? 英特尔I7的LM QM UM XM 13.安徒生的童话艺术的突出的特点是( ):A.赋予无生命的东西以人格化的形象B.写的是动植物的世界,读13.安徒生的童话艺术的突出的特点是( ):A.赋予无生命的东西以人格化的形象B.写 医院中生理盐水的浓度是多少生理盐水的浓度是多少 生理盐水浓度时多少 氧气熔点是多少 请问农业银行对账单上的现支和转支是什么意思? NaCl如何变成NaOH 氧气的熔点是多少? 氢氧化钠如何变成氯化钠? NaCl 如何一步变成 NaOH 保健:“静电离子发光球”婴幼儿经常使用,会对身体有害吗? 氯化钠加氢氧化钠反应 “体系的标准吉布斯自由能减少,则为自发反应”是否正确,原因. 甲醚CH3OCH3是可再生能源吗 商转是什么意思? 等温等压下,反应的标准吉布斯自由能变小于零的化学反应均能自发进行 这句话为什么是错误的呢 CH3OCH3是甲醚吗?回答正确, 室温下,向NaCl某溶液中加入10克NaCl晶体,充分搅拌后,尚有部分晶体未溶解,再加入10克水后,剩余晶体...室温下,向NaCl某溶液中加入10克NaCl晶体,充分搅拌后,尚有部分晶体未溶解,再加入10克水后,剩 试分析走滑断层与转换断层的联系与区别? 污水过滤属于哪种过滤原理? 过滤利用的原理是什么 内燃机的转速就是飞轮的转速吗? 处理器核心数2,线程数4什么意思 新日电动车电池保养电动车的电池是用完了在充点好还是在有电的时候充电好 请辨别下图中得三个断层分别是什么断层,并分别解释为什么会形成这样的断层 浓硝酸和稀硝酸与铜的反应方程为什么会不同?为什么它们的摩尔计量数不同 过滤的原理是________,适用于__________ 断层的定义及断距断层的定义,其中断距指什么 油膜法估测分子大小,为什么用酒精?就是为什么采用酒精来配制酒精溶液?油酸不是有亲水基吗? 新日电动车专用电池 内燃机中,飞轮的作用? 2甲醚可以通过天然气和co2合成制得的化学方程式 引力势能是负的 生长断层的定义是什么? 0.9%的生理盐水是质量浓度还是质量分数? 引力势能是负的,那么怎样解释这个呢?在计算引力势能时,我们把无限远设为0势能面,可是在计算重力势能是,我们却把0势能面定义为地面.同样是万有引力,计算势能的标准完全相反? 转换断层与平移断层的区别,最好有图示! 百分之0.9生理盐水的含义 分子引力的定义是什么? 过滤的原理是什么? 镁和浓硝酸反应吗铝也会么 求详细的解释为什么引力势能是负的? 请问氯化钠溶液PH值为5.5 需要加多少克氢氧化钠到7 20度 汽车的4冲程 吸气冲程是靠飞轮惯性的吗开始内燃机工作不是要由外力先启动吗 NaCl 溶液放入NaOH溶液中 NaOH 的PH值减少吗? 离子静电球的原理是什么? 在200g10%的氯化钠溶液中,再加入10g水,这时溶液的溶质质量分数是 不同质量的水的饱和蒸汽压100g水和10g水的饱和蒸汽压哪个大 为什么? 静电离子球可以吸收电脑周围的辐射吗? 生理盐水的浓度是多少? 俯冲的意思 1.铁在氧气中燃烧2.碳在氧气中燃烧3.氧气燃烧4.磷在氧气中燃烧5.镁条在氧气中燃烧 就写化学方程式 要配平的 (能写多少写多少) 向10%的90g氯化钠溶液中分别加入10g氯化钠,所得溶液的溶质质量分数为多少 请问intel core i7-3630M i7-3630QM i7-2960XM中数字和字母M、QM、XM分别代表什么含义? Intel酷睿 i3 540的540是什么意思?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘